알고리즘
처음에는 정수를 하나씩 입력 받으면 정렬해서, 양옆을 비교한 뒤 같은 값이면 카운팅을 해주는 방법을 고안했다.
그러나 같은 값이 몇개인지 세어볼 때는 딕셔너리를 이용하는 게 효율적이다.
기준이 되는 값을 key에, 해당 개수를 value에 저장하면 된다.
얼마 전에 풀었던 https://www.acmicpc.net/problem/1159 문제도 이와 비슷한 알고리즘으로 같은 값 개수 세기문제를 해결할 수 있다.
for _ in range(n):
num = int(input())
if d.get(num): d[num] += 1
else: d[num] = 1
d[key]는 해당 키의 value 값을 의미한다.
만약에 딕셔너리에 num이 있다면 카운트를 해주고, 없다면 값을 1로 갱신해준다.
이렇게 하면 키를 출력할 때 밸류 값을 통해 키를 출력해야 하는데,
파이썬에서는 아직 해당 라이브러리가 없어서 for문으로 키, 밸류 값을 직접 찾아줘야 한다.
for k, v in d.items():
if v == idx:
ans.append(k)
조건문에서 밸류가 원하는 값(idx)와 같다면 print or append.... 등등의 스탠스를 취할 수 있다.
최종 코드
import sys
n = int(sys.stdin.readline())
d = {}
for _ in range(n):
num = int(input())
if d.get(num): d[num] += 1
else: d[num] = 1
tmp = list(d.values())
idx = max(tmp)
ans = []
for k, v in d.items():
if v == idx:
ans.append(k)
print(min(ans))
참고 코드
import sys
n = int(sys.stdin.readline())
d = {}
for _ in range(n):
num = int(input())
if d.get(num): d[num] += 1
else: d[num] = 1
dic = sorted(d.items(), key = lambda x: (-x[1],x[0]))
print(dic[0][0])
lambda(키워드) 익명함수를 통해 간단명료하게 구현한 코드를 많이 봤다.
종종 익명 함수를 많이 사용하는데, 이 점에 대해서 꼭 짚고 넘어가야겠다....!
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/12759] 틱! 택! 토! - 파이썬 (1) | 2023.01.17 |
---|---|
[백준/1100] 하얀 칸 | 파이썬 2차원 리스트 (0) | 2023.01.16 |
[백준/14582] 오늘도 졌다 | 야구 | 파이썬 리스트 누적합 (0) | 2023.01.14 |
[백준/7510] 고급 수학 (0) | 2023.01.14 |
[백준/6996] 애너그램.. 반례찾기 (1) | 2023.01.10 |