인프런_C++
[c++] 33. 3등의 성적은?
hg_studio
2022. 8. 8. 19:36
문제
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등을 한 점수를 출력합니다.
○ 입력예제 1
7
80 96 75 82 96 92 100
○ 출력예제 1
92
우선, 점수를 내림차순 정렬을 한다.
정렬 중에서도 선택정렬을 이용하여 정렬하였다.
그리고 현재 원소와 다음 원소가 같지 않은 경우는 cnt를 하나씩 증가시켜준다.
그러다가 cnt값이 2가 되는 때에 다음 원소를 출력해준다.
#include <iostream>
using namespace std;
int main(){
int n, a[100], idx, tmp, cnt=0;
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%d", &a[i]);
}
for(int i=0; i<n-1; i++){
idx = i;
for(int j=i+1; j<n; j++){
if(a[idx] < a[j]) idx = j; //큰 순서대로 정렬
}
tmp = a[i];
a[i] = a[idx];
a[idx] = tmp;
}
for(int i=0; i<n-1; i++){
if(a[i]!=a[i+1]) {
cnt++;
}
if(cnt==2) {
printf("%d", a[i+1]);
break; //이거 꼭 넣기
}
}
return 0;
}
내가 마지막 for문에서 if(cnt==2) 일 때, break를 넣어주지 않아서 틀렸었다.
break를 넣어주지 않으면 print가 여러 개 될 수 있으므로 꼭 break를 넣어줘야 한다.