33번 문제

내가 풀이한 답
앞에서 풀었던 선택정렬을 바탕으로 오름차순으로 정렬을 한 다음 뒤에서 부터 순회(for)를 통해 각각의 요소를 접근하면서 동점자를 제외하고 점수가 다르면 count 변수를 증가시켜 count 변수가 3이 되는 시점의 index의 해당 요소를 출력하였다.
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { //freopen("input.txt", "rt", stdin); int n, i, j, temp, idx, cnt = 0; scanf("%d", &n); int *arr = (int *)malloc(sizeof(int) * n); for(i=0; i<n; i++){ scanf("%d", &arr[i]); } for(i=0; i<n-1; i++){ idx = i; for(j=i+1; j<n; j++){ if(arr[idx] > arr[j]){ idx = j; } } temp = arr[i]; arr[i] = arr[idx]; arr[idx] = temp; } for(i=n-1; i>=0; i--){ if(arr[i] != arr[i-1]) cnt++; if(cnt==3) { idx = i; break; } } printf("%d", arr[idx]); free(arr); return 0; }
결과는 통과하였다.

사이트의 답안
#include<stdio.h> int main() { freopen("input.txt", "rt", stdin); int a[101], n, tmp, idx, i, j, cnt=0; scanf("%d", &n); for(i=0; i<n; i++){ scanf("%d", &a[i]); } for(i=0; i<n-1; i++){ idx=i; for(j=i+1; j<n; j++){ if(a[j]>a[idx]) idx=j; } tmp=a[i]; a[i]=a[idx]; a[idx]=tmp; } for(i=1; i<n; i++){ if(a[i-1]!=a[i]) cnt++; if(cnt==2){ printf("%d\n", a[i]); break; } } return 0; }
사이트의 답은 선택정렬을 이용해 내림차순으로 정렬한 다음 처음 숫자가 아닌 다음 숫자부터 같은 숫자가 아니면 count 변수를 증가시켜 count 변수가 2인 index의 요소를 출력하였다.
'알고리즘 & 자료구조 > 정렬' 카테고리의 다른 글
37. Least Recently Used(카카오 캐시 문제 변형) (0) | 2020.09.12 |
---|---|
36. 삽입정렬 (0) | 2020.09.11 |
35. Special Sort(구글 인터뷰) (0) | 2020.09.11 |
34. 버블정렬 (0) | 2020.09.11 |
32. 선택정렬 (0) | 2020.09.11 |