문제
N명의 수학성적이 주어지면 그 중 3등을 한 수학성적을 출력하는 프로그램을 작성하세요.
만약 학생의 점수가 100점이 3명, 99점이 2명, 98점이 5명, 97점이 3명 이런식으로 점수가 분포되면 1등은 3명이며, 2등은 2명이며 3등은 5명이 되어 98점이 3등을 한 점수가 됩니다.
💡 입력설명
첫 번째 줄에 자연수 N(1<=N<=100)이 주어집니다. 두 번째 줄에 N개의 수학성적 점수가 공백을 사이에 두고 입력됩니다. 수학성적 점수는 100점 만점 기준으로 입력됩니다.
💡 출력설명
3등을 한 점수를 출력합니다.
💡 입력예제
7
80 96 75 82 96 92 100
💡 출력예제
92
코드
최종 풀이
#include <stdio.h>
#include <vector>
using namespace std;
int main() {
int n, i, j, idx, tmp, min = 2147000000, cnt = 0;
scanf("%d", &n);
vector<int> a(n);
for(i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// selection sort
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 = 0; i < n; i++) {
if(cnt == 3) {
printf("%d", min);
break;
}
if(a[i] < min) {
min = a[i];
cnt++;
} else if(a[i] == min) {
continue;
}
}
return 0;
}
설명
사용자로부터 N을 입력받고 N만큼 반복하는 for문을 작성하여 등수를 입력받고 배열 a에 할당한다.
할당한 a배열을 선택정렬 알고리즘을 사용하여 내림차순 정렬한다.
정렬한 a배열을 순회하여 해당 등수가 min보다 작으면 min에 할당하고 cnt를 1씩 증가한다.
만약 해당 자연수가 min과 같을 경우 등수가 같은 것을 의미하므로 cnt와 min을 할당하지 않고 continue한다.
cnt가 3에 도달할 경우 3등의 등수를 의미하므로 해당 min값을 출력하여 마무리한다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.
'🤯 코딩테스트 > C/C++' 카테고리의 다른 글
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 정렬 - Special Sort (0) | 2022.08.31 |
---|---|
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 정렬 - 버블정렬 (0) | 2022.08.31 |
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 정렬 - 선택정렬 (0) | 2022.08.31 |
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 코드구현력 기르기 - 탄화수소 질량 (0) | 2022.08.30 |
[it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비] 코드구현력 기르기 - 3의 개수는?(small) (0) | 2022.08.30 |