https://www.acmicpc.net/problem/1205
22/10/10
단순 구현 문제로, 주어진 상황을 그대로 해석하여 문제를 구현하면 된다.
문제 접근 방식:
먼저 현재 랭킹 리스트에는 몇 명 있는지(N), 태수의 새로운 점수(new_score), 랭킹 리스트에 올라갈 수 있는 점수의 개수(P)가 주어진다.
먼저 경우의 수를 나눌 수 있다.
만약 현재 랭킹 리스트에 아무도 없는 상황이라면, 랭킹 리스트에 올라갈 수 있는 점수의 개수와는 무관하게 태수의 새로운 점수가 1등을 먹는다. 따라서, 1을 출력하면 된다.
그게 아닌 일반적인 상황이라면, 현재 랭킹 리스트를 입력받는다.
만약 현재 랭킹 리스트에 몇 명 있는지(N)가 랭킹 리스트에 올라갈 수 있는 점수의 개수(P) 보다 작다면, 태수가 아무리 못해도 꼴등은 가능하다.
예를 들어, 현재 랭킹 리스트가 10, 9, 8이고, 랭킹 리스트에 올라갈 수 있는 점수의 개수가 10개라면, 태수가 8점보다 낮은 점수를 받는다고 해도 꼴등이 가능하다.
때문에, 태수의 새로운 점수와 현재 랭킹 리스트에 있는 점수를 하나씩 비교해가며 태수의 랭킹을 정해주면 된다.
만약 그러지 않는다면(N==P), 현재 랭킹 리스트에 있는 꼴등이랑 태수 점수를 비교해보자.
꼴등이 태수 점수보다 높으면 태수는 랭킹에 못 올라가므로, -1을 출력하면 된다.
만약 꼴등이 태수 점수보다 낮으면, 위에서 비교한 과정을 그대로 따라가서 태수의 랭킹을 정해주면 된다.
이거를 구현하는 데에 유의해야 할 점은 같은 점수면 등수가 같이 나온다는 점, 그리고 그 등수는 제일 작은 등수로 정해진다는 점이다.
아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.
# 1205번 등수 구하기
# 구현
N, new_score, P = map(int, input().split())
if N == 0:
print(1)
else:
now_leader_board = list(map(int, input().split()))
if len(now_leader_board) < P:
rank = 1
for score in now_leader_board:
if score <= new_score:
break
rank += 1
print(rank)
else:
if now_leader_board[-1] >= new_score:
print(-1)
else:
rank = 1
for score in now_leader_board:
if score <= new_score:
break
rank += 1
print(rank)
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[Python] 25591번 푸앙이와 종윤이 (0) | 2022.11.01 |
---|---|
[Python] 17114번 하이퍼 토마토 (0) | 2022.11.01 |
[Python] 16895번 님 게임 3 / 7685번 Nim (0) | 2022.11.01 |
[Python] 13034번 다각형 게임 / 16187번 Game on Plane (0) | 2022.11.01 |
[Python] 3986번 좋은 단어 (0) | 2022.10.29 |