alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 1205 등수 구하기_파이썬 본문
1205 등수 구하기 https://www.acmicpc.net/problem/1205
문제 풀기 전 공부할 것 : 문제 해석
풀이 1
<내용>
- 0 <= n <= p이고 둘째 줄은 n이 0보다 큰 경우에만 주어지므로 n == 0일 때와 n > 0인 경우로 나눈다.
- n == 0이면 10 <= p <= 50이므로 랭킹은 1이 된다.
- n > 0인 경우
- n == p이면서 랭킹 중 가장 작은 점수가 새로운 점수보다 크거나 같다면 -1을 출력한다.
- 그 외의 경우 랭킹 점수를 for문으로 돌면서 랭킹의 점수가 새로운 점수보다 작거나 같으면 그 등수가 새로운 점수의 등수가 된다.
- for문을 돌았지만 새로운 점수보다 작거나 같은 점수가 없다면 n+1이 새로운 점수가 된다.
<코드>
n, new, p = map(int, input().split())
if n == 0:
print(1)
else:
score = list(map(int, input().split()))
if n == p and score[-1] >= new:
print(-1)
else:
res = n + 1
for i in range(n):
if score[i] <= new:
res = i + 1
break
print(res)
+) score에 새로운 점수를 추가해서 index 찾는 방법으로 해결하기
풀이 2
<내용>
- 0 <= n <= p이고 둘째 줄은 n이 0보다 큰 경우에만 주어지므로 n == 0일 때와 n > 0인 경우로 나눈다.
- n != 0인 경우
- 점수 리스트에 새로운 점수를 추가하고 정렬한다.
- 새로운 점수의 등수를 idx에 저장한다.
- idx(등수)가 p보다 큰 경우 -1을 출력한다.
- idx(등수)가 p보다 작은 경우
- 만약 n(랭킹 리스트의 점수의 개수)가 p랑 같을 때 가장 낮은 점수가 새로운 점수라면 이는 랭킹 리스트가 꽉 차있을 때, 새로운 점수가 이전 점수보다 좋지 않은 경우이므로 -1을 출력한다.
- 그런 경우가 아니면 idx(새로운 점수의 등수)를 출력한다.
- n == 0이면 10 <= p <= 50이므로 랭킹은 1이 된다.
<코드>
n, new, p = map(int, input().split())
if n:
score = list(map(int, input().split()))
score.append(new)
score.sort(reverse=True)
idx = score.index(new) + 1
if idx > p:
print(-1)
else:
if n == p and new == score[-1]:
print(-1)
else:
print(idx)
else:
print(1)
728x90
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 1700 멀티탭 스케줄링_파이썬 (0) | 2020.08.22 |
---|---|
[알고리즘][Python] 백준(BOJ) 1747 소수&팰린드롬_파이썬 (0) | 2020.08.17 |
[알고리즘][Python] 백준(BOJ) 1449 수리공 항승_파이썬 (0) | 2020.08.14 |
[알고리즘][Python] 백준(BOJ) 1946 신입 사원_파이썬 (0) | 2020.08.13 |
[알고리즘][Python] 백준(BOJ) 8979 올림픽_파이썬 (0) | 2020.08.07 |
Comments