문제
1205번: 등수 구하기
첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보
www.acmicpc.net
정답 소스코드 (Python)
n,new,p=map(int,input().split())
if n==0:print(1)
else:
grade=list(map(int,input().split()))
for i in range(len(grade),p):grade.append(-1)
p_in=False
rank=[1]
for i in range(1,p):
if grade[i]==grade[i-1]:rank.append(rank[i-1])
else:rank.append(i+1)
if grade[0]<new:
result=1
p_in=True
else:
for i in range(1,p):
if grade[i]<new:
if i<p:p_in=True
if grade[i-1]==new:
result=rank[i-1]
else: result=rank[i]
break
if p_in:print(result)
else:print("-1")
풀이 (Python)
단순한 구현 문제이지만, 생각보다 예외처리를 해주어야 할 부분이 많아 실버 4 난이도 치고 푸는데 시간이 걸렸다.
Point 1) 예외처리
1.
n,new,p=map(int,input().split())
if n==0:print(1)
else:
grade=list(map(int,input().split()))
for i in range(len(grade),p):grade.append(-1)
....
n이 0인 경우 입력조차 받지 않기 떄문에 맨 처음에 n==0인 경우와 아닌 경우를 나누어 주었다.
2.
if grade[0]<new:
result=1
p_in=True
else:
for i in range(1,p):
if grade[i]<new:
if i<p:p_in=True
if grade[i-1]==new:
result=rank[i-1]
else: result=rank[i]
break
아래의 for문이 1번 인덱스부터 시작하므로, 새로 들어온 점수가 가장 큰 점수인 경우 확인하지 못하는 경우가 있었다. 새로 들어온 점수가 가장 큰 경우 따로 처리해 주었다.
3.
#기본 값
p_in=False
.....
if grade[0]<new:
result=1
p_in=True
.....
for i in range(1,p):
if grade[i]<new:
if i<p:p_in=True
.....
#결과 예외처리 리스트에 포함안되면 -1
if p_in:print(result)
else:print("-1")
P리스트안에 포함이 된다면, p_in변수를 true로 변경해 주어 마지막에 결과 출력할 때 리스트에 포함되지 않은 경우 -1을 출력하도록 예외를 처리해 주었다.
'Baekjoon' 카테고리의 다른 글
[백준] 2206번 벽 부수고 이동하기 (파이썬) (1) | 2024.02.10 |
---|---|
[백준] 1253번 좋다 (파이썬) (1) | 2024.02.10 |
[백준] 5585번 거스름돈 (파이썬) (0) | 2024.02.07 |
[백준] 4796번 캠핑 (파이썬) (2) | 2024.02.07 |
[백준] 11399번 ATM (파이썬) (2) | 2024.02.06 |