본문 바로가기

알고리즘8

C- ACM - 휴대폰번호 정렬 엑셀을 만들라는 문제..드뎌 온갖 야매란 야매는 다 써서 풀었답니다~ ㅋㅋㅋ D. 휴대폰번호 정렬 (Time Limit: 2 seconds) LK 텔레콤에 근무하는 신입사원 정희에게 부장님이 새로운 업무를 지시했다. 고객들의 휴대폰 전화번호를 정렬하는 작업이다. 휴대폰 번호는 국번 3 자리와 중간국번 3자리 또는 4자리, 그리고 뒷 자리 수 4 자리로 총 10 개 혹은 11 개의 숫자로 이루어진다. 그리고 휴대폰 국번은 010, 011, 016, 017, 018, 019 의 여섯 가지가 존재한다. 국번과 중간국번, 뒷자리 수는 하이픈(“-”)으로 구분된다. 부장님이 원하는 요구사항은 다음과 같다. 우선, 특정 국번 번호 순서로 정렬이 되어야 하며, 국번이 같은 경우에는 중간국번 숫자끼리 비교해서 오름차순.. 2010. 7. 13.
C- ACM - 대지 예전에 우리 벽보를 함부로 덮은 타동아리 포스터 면적을 계산해서 따지러가는 문제가 있었는데 그거랑 유사하네요. 스토리도 은근탄탄 ㅋ 임씨는 1950년 한국전쟁으로 많은 손해를 본 사람들 중 하나다. 전쟁 통에 손해보지 않은 사람이 어디 있을까 만은 그는 6.25가 일어나기 전만 해도 충청도 지방에 넓은 대지를 소유한 큰 부자였다. 전쟁이 나자 임씨는 땅문서와 값 나가는 것들만 챙겨서 일본으로 피난을 가지만 피난 중에 그만 땅문서를 잃어버리고 만다. 전쟁이 끝난 후에 임씨의 땅은 이미 다른 사람들의 논밭이 되어 있었고, 임씨는 땅을 되찾으려 했지만 문서가 없으니 생떼 쓰는 것과 다를 바 없었다. 이러다가 임씨는 길바닥에 나앉게 생겼다. 이 때, 임씨에게 좋은 생각이 떠올랐으니 바로 자신이 습관처럼 땅 깊숙.. 2010. 7. 7.
C- ACM - 다운로드 ㅋㅋㅋ 이런 문제 좋음~ 정희는 한 음악 포털 사이트에서 일정 금액을 충전하여 mp3파일을 다운로드 받아서 사용해 왔다. 지금 이 사이트에서 k곡을 다운받으면 한 곡을 무료로 다운받을 수 있는 이벤트를 진행 중이고, 현재 정희가 다운받을 수 있는 mp3파일의 개수는 n개이다. 이벤트 기간 중 정희가 다운받을 수 있는 총 mp3파일의 개수는 몇 개인가? 첫 줄에는 테스트 케이스의 개수 T ( 0 124 #include int main(void) { int n ,k, plus; scanf("%d %d",&n, &k); plus=n/k; plus+=plus/k; printf("%d %d -> %d\n",n,k,plus+n); return 0; } 2010. 7. 2.
C- ACM - 수 뒤집기 언뜻 배열을 생각 할 수도 있으나 10진수 쉬프트의 개념으로 접근한다면 깔끔하게 풀수 있다는 조언을 받았죠. 즉, 변수 하나를 만들어서 1234 -> NULL 123 -> 4 12 -> 43 1 -> 432 이런식으로 원본(좌측)수는 나머지를 구한뒤 10씩 나누고 사본(우측) 은 원본의 나머지를 가져온뒤 10씩 곱해가는 과정입니다. 아 신기하당~ㅋㅋ #include int swapnum(int num_temp)//뒤집은 수를 만드는 함수 { int num_next=NULL;// 1. 빈 변수를 하나 만든뒤 while(num_temp>0)// 2. 원본의 수가 한자리가 될때까지 반복 { num_next*=10;// 3. 사본에 10씩 곱해서 앞으로 채워 넣습니다 num_next+=num_temp%10;//.. 2010. 6. 12.
C- ACM - 더하기 대학생 경시대회의 기초 알고리즘 문제를 풀어봅시다. 이 코너는 부산-경남지역 알고리즘의 마스터 사로자바님과 함께 합니다 :D #include int main(void) { int set, num, repeat; int sum=NULL; scanf("%d", &repeat); for(int i=0; i 2010. 6. 7.
C - 알고리즘 - 퀵정렬 아휴, 이게 며칠동안 왜 이리 이해가 되지 않았을까요ㅎ #include #define SWAP(x,y,t) (t=x), (x=y), (y=t); //스왑을 간단하게 void partition(int data[],int length){ int temp=NULL; int head=-1; int tail=length-1; int pivot=data[tail]; //끝자락의 아무 아이가 합격선이 되겠네요.. 좋은 방법은 아니라지만 전 쉬워서 좋아요 :D if(length=tail) break; //머리가 추월시 끝냄 SWAP(data[head],data[tail],temp); } SWAP(data[length-1],data[head],temp); //마지막에는 기준을 가운데 쏙 넣어줌 partition(data.. 2010. 5. 22.
C - 알고리즘 - 삽입정렬 코드가 길어 행을 줄였습니다. 이렇게 하면.. 예쁘지는 않지만~ (사랑스러워~) 삽입정렬은.. 마치 [왕자와 거지]게임 같아서 한번 내동댕이 쳐진 숫자는 밑바닥에서부터 자리를 찾아 쏙 넣어진답니다..(-_-?)리스트를 이용한 삽입정렬은 링크를 참조하세요(http://topnanis.tistory.com/176)그림을 보면- #include #include //memmove함수사용 int main(void){ int temp=NULL;int data_set[]={8,6,7,9,4,3,5,2,1,10};for(int i=0; idata_set[i]) temp=data_set[i]; //정렬되지 않은 수를 temp에 태워 처음으로 보냄else continue; for(int j=0; j 2010. 5. 15.
C - 알고리즘 - 버블정렬 글씨가 한단계씩 정렬되는 모습을 본떠 버블정렬이라 했다네요. 리스트를 이용한 버블정렬은 링크를 참조하세요(http://topnanis.tistory.com/176) 아래코드는 엔터를 칠때마다 글자가 정말 뽀글뽀글 옆으로 이동한답니다~ 궁금하지 않나요? ㅋ #include #include #include int main(void){int DataSet[]={6,4,2,3,1,5};int temp=NULL;int stop;int time=0; printf("Bubble Algorithm\n"); for(int i=0; i 2010. 5. 14.