반응형
문제
https://www.acmicpc.net/problem/5766
🐍파이썬
import sys
while True:
n, m = map(int, sys.stdin.readline().split())
if n == 0 and m == 0:
break
player = {} #(player번호:cnt갯수)로 이루어진 dic생성
for _ in range(n):
p = list(map(int, sys.stdin.readline().split()))
for i in p:
if i in player: #사전에 존재하는 선수 번호일 경우
player[i] += 1 #카운트 +1
else: #사전에 존재하지 않는 선수일 경우
player[i] = 1 #1로 초기화
#선수의 정보를 담은 사전을 value기준으로 내림차순, value가 동일하다면 key기준으로 오름차순 정렬
player = sorted(player.items(), key = lambda x:(-x[1], x[0]))
#1등 선수(문제조건에 1명으로 고정돼있음) 제외한 2등 선수의 점수를 score에 저장
score = player[1][1]
#전체 리스트를 돌며 score와 동일한 값을 지닌 선수들을 출력
for i in player:
if i[1] == score:
print(i[0], end=' ')
#줄바꿈
print()
더보기
n, m을 while문 밖에서 입력받아서 입력값에 오류가 났는데 이걸 눈치채는 데 1시간 넘게 걸렸다...😭
기본조건이 문제에 맞게 구현 잘 됐는지 꼭 확인하자.
다른 풀이 방법
import sys
input = sys.stdin.readline
while True:
n, m = map(int, input().split())
arr = [0] * 10005
res = []
if n == 0 and m == 0:
break
for _ in range(n):
data = list(map(int, input().split()))
#arr배열에서 data값에 해당하는 인덱스에 +1
for num in data:
arr[num] += 1
#arr에서 가장 큰 수
first = max(arr)
#선수번호 1~10001까지 반복
for i in range(1, 10001):
if arr[i] == first: #first와 값이 같다면
arr[i] = 0 #0으로 초기화
#가장 큰 수를 0으로 초기화했으므로 두번째 값이 가장 큰 수가 되었음
second = max(arr)
#전체 선수 중 2등 점수를 가지고 있는 선수들을 res에 저장
for i in range(1, 10001):
if arr[i] == second:
res.append(i)
#res 값을 출력
print(*res)
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준|파이썬] 2891: 카약과 강풍 (실버5) (0) | 2023.04.21 |
---|---|
[백준|파이썬] 2563: 색종이 (실버5) (0) | 2023.04.19 |
[백준|파이썬] 2775: 부녀회장이 될테야 (브론즈1) (0) | 2023.04.17 |
[백준|파이썬] 1388: 바닥 장식 (실버4) (0) | 2023.04.13 |
[백준|파이썬] 5014: 스타트링크 (실버1) (0) | 2023.04.12 |
[백준|파이썬] 1697: 숨바꼭질 (실버1) (0) | 2023.04.12 |