alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 8979 올림픽_파이썬 본문
8979 올림픽 https://www.acmicpc.net/problem/8979
문제 풀기 전 공부할 것 : 정렬, 구현
풀이 1
<내용>
- n, k를 입력받는다.
- 국가별 메달 수를 리스트로 입력받는다.
- 정렬 sort() 함수를 이용해서 금, 은, 동 많은 순서로 정렬한다.
- 최종 등수를 grade로 사이에 등수가 같을 경우를 count할 s를 초기화한다.
- grade를 1로 초기화하는 경우는 등수는 1등부터 시작하기 때문이다.
- medals[i][0]이 k이면 grade를 출력하고 break로 for문을 빠져나오면 된다.
- 등수가 같을 때를 대비해서 정렬된 이전 국가와 비교해서 금, 은, 동의 메달 수가 똑같으면 grade가 아닌 s에 1을 더해 공동 등수를 출력하도록 한다.
<코드>
n, k = map(int, input().split())
medals = [list(map(int, input().split())) for _ in range(n)]
medals.sort(key = lambda x : (x[1], x[2], x[3]), reverse=True)
grade, s = 1, 0
for i in range(n):
if i != 0:
if medals[i-1][1:] == medals[i][1:]:
s += 1
else:
if s:
grade += s
s = 0
grade += 1
if medals[i][0] == k:
print(grade)
break
+) sort함수 key로 구현하는 방법 정확히 알고 있기
+) 다른 방법 찾아보기
풀이 2
<내용>
- 위의 내용에서 정렬까지는 같은 방법
- 등수를 찾을 때 for문을 돌며 국가 k의 index를 찾아서 저장한다.
- 등수가 같은 나라가 있을 때를 대비해서 for문을 돌며 국가 k의 금, 은, 동메달 수와 같은 국가가 나오면 그 국가의 (index+1)등이므로 출력하고 break로 for문을 빠져나온다.
<코드>
n, k = map(int, input().split())
medals = [list(map(int, input().split())) for _ in range(n)]
medals.sort(key = lambda x : (x[1], x[2], x[3]), reverse=True)
for i in range(n):
if medals[i][0] == k:
idx = i
for i in range(n):
if medals[idx][1:] == medals[i][1:]:
print(i+1)
break
풀이 3
<내용>
- 위의 방법에서 index 찾는 방법 빼고는 같은 방법
- index 찾을 때 list.index() 함수를 이용해서 찾는다.
<코드>
n, k = map(int, input().split())
medals = [list(map(int, input().split())) for _ in range(n)]
medals.sort(key = lambda x : (x[1], x[2], x[3]), reverse=True)
idx = [medals[i][0] for i in range(n)].index(k)
for i in range(n):
if medals[idx][1:] == medals[i][1:]:
print(i+1)
break
728x90
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 1449 수리공 항승_파이썬 (0) | 2020.08.14 |
---|---|
[알고리즘][Python] 백준(BOJ) 1946 신입 사원_파이썬 (0) | 2020.08.13 |
[알고리즘][Python] 백준(BOJ) 2816 디지털 티비_파이썬 (0) | 2020.08.05 |
[알고리즘][Python] 백준(BOJ) 2621 카드게임_파이썬 (0) | 2020.08.04 |
[알고리즘][Python] 백준(BOJ) 1652 누울 자리를 찾아라_파이썬 (0) | 2020.08.02 |
Comments