-
1205. 등수 구하기Algorithm/Baekjoon 2023. 3. 6. 23:09
처음엔 단순히 for문 돌려가면서 풀었는데, 문제를 읽으면서 놓친 부분이 꽤나 많았다.
예를 들어 예제 입력 4 처럼 n이 0인 경우에는 무조건 1이 나와야 한다는 점이나,
등수는 p보다 작지만 동점자로 인해 랭킹 리스트에 들지 못할 수 있다는 점 등등...
"틀렸습니다"를 확인해가며 고쳤다.
코드는 아래와 같다.
import sys input = sys.stdin.readline def get_rank(new, scores, p) : cnt = 0 before_rank = 1 for i, score in enumerate(scores) : if cnt == p : return -1 if new > score : if scores[i-1] == new : return before_rank else : return cnt+1 cnt += 1 if i >= 1 and scores[i-1] != score : before_rank = cnt if cnt < p : if scores[-1] == new : return before_rank else : return cnt+1 return -1 n, new_score, p = map(int, input().split()) if n != 0 : scores = list(map(int, input().split())) print(get_rank(new_score, scores, p)) else : print(1)
코드를 더 깔끔하게 정리할 수 있을 것 같았다.
리스트 메소드를 통해 새로운 점수가 몇 등인지를 더 쉽게 구하여 답을 낼 수 있었다.
import sys input = sys.stdin.readline n, new_score, p = map(int, input().split()) if n == 0 : answer = 1 else : scores = list(map(int, input().split())) scores.append(new_score) scores.sort(reverse=True) first_idx = scores.index(new_score) same_score = scores.count(new_score) if first_idx + same_score > p : answer = -1 else : answer = first_idx+1 print(answer)
시간은 이런 차이를 보였다. 큰 차이는 없는 듯함.
'Algorithm > Baekjoon' 카테고리의 다른 글
10971. 외판원 순회 (0) 2023.03.19 9663. N-queen (0) 2023.03.06 1009. 분산처리 (0) 2023.03.01 11723. 집합 (0) 2023.02.27 1018. 체스판 다시 칠하기 (0) 2023.02.20