내가 푼 문제 중 가장 정답률이 낮은 문제다. 문제의 요점은 같은 점수 끼리에서 송유진의 점수는 그 점수들 중 가장 낮은 점수로 취급 된다는 거다.
예를 들자면 랭킹 리스트가 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 |