본문 바로가기
BOJ

[C] 백준 1205번: 등수 구하기

by 야호호코코 2018. 7. 31.
반응형

 내가 푼 문제 중 가장 정답률이 낮은 문제다. 문제의 요점은 같은 점수 끼리에서 송유진의 점수는 그 점수들 중 가장 낮은 점수로 취급 된다는 거다. 


 예를 들자면 랭킹 리스트가 3개 까지만 들어갈 수 있고, 기존 점수 3개가 100 100 100이라면 송유진의 점수가 100점이어도 랭킹 진입을 할 수 없다.

 

 이 점이 정답률이 낮은 원인인 것 같다.


 내가 이런 알고리즘을 풀 때 요점으로 보는 것은 주어진 조건 내에서 얼마나 편하고 싸게 먹히는 방법으로 푸느냐이다. 굳이 거창한 방법으로 풀 필요없다고 생각한다. 어쨋든 결과물은 같은 거로 나오니까.



입출력 예시


입력 

출력 

3 100 3

100 100 100 

-1 


입력 

출력 

3 90 10

100 90 90

2



정답 코드

#include <stdio.h>


int main() {

	int n;
	int song, song_rank = 1, song_p = 1;
	int p;

	int rank[50];

	int i;

	scanf("%d %d %d", &n, &song, &p);

	for (i = 0; i < n; i++) {
		scanf("%d", rank + i);
		if (rank[i] > song) song_rank++;
		if (rank[i] >= song) song_p++;
	}

	if (song_rank > p) printf("-1");
	else if (song_p > p) printf("-1");
	else printf("%d", song_rank);

	return 0;

}


코드 설명


1. n(입력할 점수의 갯수), song(송유진의 점수), p(랭크 리스트의 크기)를 입력받는다. song_rank는 실제 송유진의 순위를 계산할 변수이고, song_p는 송유진보다 점수가 큰 사람과 동점자까지 세서 정확한 진입 가능 여부를 알아내는 변수이다.


2. n개의 점수를 입력받는다. 입력 받는 동시에 송유진의 순위(1 + 송유진 점수 초과인 사람의 수)도 계산한다. song_p는 동점자의 수도 센다.


3. 만약 랭크 리스트의 크기보다 순위가 높으면 당연히 진입 불가로 -1을 출력한다. 랭크 리스트의 크기보다 순위가 낮아도 동점자가 많아 순위는 랭크 리스트의 크기보다 작지만 실제로는 진입 불가인 경우가 있으므로 song_p(송유진 점수 이상인 사람의 수)가 랭크 리스트의 크기보다 커도 진입 불가이므로 -1을 출력한다. 이외의 경우에는 진입이 가능하므로 송유진의 순위를 출력한다. 



반응형

'BOJ' 카테고리의 다른 글

[C] 백준 13458번: 시험 감독  (0) 2018.08.12
[C] 백준 9012번: 괄호  (0) 2018.07.29
[C] 백준 2869번: 달팽이는 올라가고 싶다  (5) 2018.07.25