문제
정답 소스코드 (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번 캠핑 (파이썬) (1) | 2024.02.07 |
[백준] 11399번 ATM (파이썬) (1) | 2024.02.06 |