Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

아무거나 내꺼 공부할래

3등의 성적은? / c / 제한시간 없음 본문

[c언어&c++] 알고리즘 공부/인프런(Inflearn)

3등의 성적은? / c / 제한시간 없음

mero95 2021. 1. 22. 14:48

▣ 문제

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;
}

 

.

전반적인 코드 흐름은 똑같긴한데 출력 부분에서 쓸떼없는 변수를 줄일필요 있음