아무거나 내꺼 공부할래
3등의 성적은? / c / 제한시간 없음 본문
▣ 문제
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 |
<내 코드>
#pragma warning(disable:4996)
#include<stdio.h>
int main() {
int n, i, j;
int score[100];
int temp;
int index;
int cnt = 0;
int min = 2147000000;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &score[i]);
}
for (i = 0; i < n - 1; i++) {
index = i;
for (j = i + 1; j < n; j++) {
if (score[index] < score[j])index = j;
}
temp = score[i];
score[i] = score[index];
score[index] = temp;
}
for (i = 0; i < n; i++) {
if (score[i] < min) {
min = score[i];
cnt++;
}
if (cnt == 3) break;
}
printf("%d\n", min);
return 0;
}
<수정한 코드>
#pragma warning(disable:4996)
#include<stdio.h>
int main() {
int n, i, j;
int score[100];
int temp;
int index;
int cnt = 0;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &score[i]);
}
for (i = 0; i < n - 1; i++) {
index = i;
for (j = i + 1; j < n; j++) {
if (score[index] < score[j])index = j;
}
temp = score[i];
score[i] = score[index];
score[index] = temp;
}
for (i = 1; i < n; i++) {
if (score[i] != score[i-1]) {
cnt++;
}
if (cnt == 2) {
printf("%d\n", score[i]);
break;
}
}
return 0;
}
.
전반적인 코드 흐름은 똑같긴한데 출력 부분에서 쓸떼없는 변수를 줄일필요 있음
'[c언어&c++] 알고리즘 공부 > 인프런(Inflearn)' 카테고리의 다른 글
LRU(Least Recently Used, 카카오 캐시 문제 변형, 삽입정렬 응용) / c / 제한시간 없음 (0) | 2021.01.25 |
---|---|
Special Sort(Google 인터뷰) / c / 제한시간 없음 (0) | 2021.01.22 |
탄화수소 질량 / c / 제한시간 없음 (0) | 2021.01.22 |
3의 개수는?(Google 인터뷰) / c / 제한시간 없음 (0) | 2021.01.20 |
N!에서 0의 개수 / c / 제한시간 없음 (0) | 2021.01.20 |