728x90
문제설명
입력 & 출력
나의 풀이
이번 문제는 두 개의 대회에서의 순위에 따라 상금을 지급하는 방식과 관련된 문제입니다. 두 개의 대회는 서로 다른 상금 체계를 가지고 있으며, 참가자들이 각 대회에서 얻은 순위에 따라 상금을 수령할 수 있습니다.
이번 문제에서 가장 중요한 포인트는 자신의 등수가 상금을 받을 수 있는지 체크해야하기 때문에 누적된 순위를 구하는 것이 중요합니다.
첫 번째 대회는 다음과 같이 상위 순위별 인원 수에 따라 분배됩니다.
- 1등: 1명에게 500만원
- 2등: 2명에게 300만원 (2등과 3등)
- 3등: 3명에게 200만원 (4등, 5등, 6등)
- 4~5위: 4명에게 50만원 (7등, 8등, 9등, 10등)
- 6~10위: 5명에게 30만원 (11등부터 15등까지)
- 11~15위: 5명에게 10만원 (16등부터 20등까지)
두 번째 대회의 상금 체계는 다음과 같습니다.
- 1등: 1명에게 512만원
- 2~3등: 2명에게 각각 256만원 (2등과 3등)
- 4~7등: 4명에게 각각 128만원 (4등부터 7등까지)
- 8~15등: 8명에게 각각 64만원 (8등부터 15등까지)
- 16~31등: 16명에게 각각 32만원 (16등부터 31등까지)
먼저 BufferedReader로 가정한 횟수 T를 받아주고, StringTokenizer로 공백을 기준으로 가정한 등수를 받아줍니다.
그 다음 첫 번째 대회에 대한 자신의 등수를 구할 수 있는 firstCompetition 함수에서 가장 중요한 포인트인 각 상금 구간별로 누적된 순위를 구해줍니다.
for (int i = 0; i < FIRST_COMPETITION_RANKS.length; i++) {
limit += FIRST_COMPETITION_RANKS[i];
if (rank <= limit) {
return FIRST_COMPETITION_PRIZES[i];
}
}
반복문을 통해 첫 번째 대회의 각 상금 구간별 인원을 누적해 줍니다.
그러면 첫 번째 대회에 대한 상금을 받을 수 있는 인원이 limit에 저장되고, 인자로 받은 rank가 상금을 받을 수 있는 구간에 있다면 즉, 상금을 받을 수 있는 등수라면 해당하는 등수에 맞는 상금을 리턴해줍니다.
똑같이 2번째 대회도 구해주고, StringBuilder를 사용하여 줄바꿈을 한 최종 금액을 출력해주어 마무리해줬습니다.
'Coding Test > 백준' 카테고리의 다른 글
[백준] 성 지키기 (구현, Java) (0) | 2024.11.11 |
---|---|
[백준] 숫자 (BufferedReader, Long) (0) | 2024.11.08 |
[백준] 플러그 (Java, BufferedReader) (0) | 2024.11.06 |
[백준] 시그마 (등차 수열) (0) | 2024.11.05 |
[백준] 구간 합 구하기 4 (누적 합, 구간 합, Prefix Sum, 11659번, Java) (0) | 2024.07.18 |