๐ ๋์ ๋๋ฆฌ๋ฅผ ํ์ฉํ ๋ฒ ์คํธ์ ๋ฌ ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ
https://www.acmicpc.net/problem/1302
๋ฐฑ์ค 1302๋ฒ ๋ฒ ์คํธ์ ๋ฌ ๋ฌธ์ ๋ ๊ฐ์ฅ ๋ง์ด ํ๋ฆฐ, ์ฆ ํ๋งค๋์ด ๊ฐ์ฅ ๋์ ์ฑ ์ ์ฐพ๋ ๋ฌธ์ ์ ๋๋ค. ์ด ๋ฌธ์ ์ ํต์ฌ์ ๋์ ๋๋ฆฌ๋ฅผ ํ์ฉํด ํ๋งค๋์ ํจ๊ณผ์ ์ผ๋ก ๊ณ์ฐํ๊ณ , ์กฐ๊ฑด์ ๋ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ ์์ต๋๋ค.
๐ ๋ฌธ์ ์ดํด์ ํด์
1. ๋ฌธ์ ์๊ตฌ์ฌํญ
โ ์ค๋ ํ๋งค๋ ์ฑ ๋ค ์ค ๊ฐ์ฅ ๋ง์ด ํ๋ฆฐ ์ฑ ์ ์ ๋ชฉ์ ์ถ๋ ฅ
โ ๊ฐ์ฅ ๋ง์ด ํ๋ฆฐ ์ฑ ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์๋ ์ฑ ์ ์ถ๋ ฅ
โ ์ ๋ ฅ์ 1,000๊ฐ ์ดํ์ ์์ฐ์ N(์ฑ ์ ๊ฐ์)๊ณผ N๊ฐ์ ์ฑ ์ ๋ชฉ์ผ๋ก ๊ตฌ์ฑ
2. ํ ์คํธ ์ผ์ด์ค ๋ถ์
โ ์์ 1: “top”์ด 4๋ฒ ํ๋ ค ๊ฐ์ฅ ๋ง์ด ํ๋ฆฐ ์ฑ ์ผ๋ก ์ ์ ๋์๋ค
โ ์์ 3: “a”์ “b”๊ฐ ๊ฐ๊ฐ 3๋ฒ์ฉ ํ๋ ค ๊ณต๋ 1์์ด๋, ์ฌ์ ์์ผ๋ก “a”๊ฐ ์์๋ฏ๋ก “a” ์ถ๋ ฅ
โ ์์ 4: “icecream”, “peanuts”, “chocolate”์ด ๊ฐ๊ฐ 2๋ฒ์ฉ ํ๋ ค ๊ณต๋ 1์์ด๋, ์ฌ์ ์์ผ๋ก “chocolate”์ด ๊ฐ์ฅ ์์ “chocolate” ์ถ๋ ฅ
๐ก ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ์ ๋ต
1. ์๋ฃ๊ตฌ์กฐ ์ ํ
โ ๋์ ๋๋ฆฌ(ํด์๋งต)๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ ์ ๋ชฉ(ํค)๊ณผ ํ๋งค๋(๊ฐ)์ ๊ด๋ฆฌ
โ ๋์ ๋๋ฆฌ์ ํค-๊ฐ ์์ ์ด์ฉํด ํจ์จ์ ์ผ๋ก ํ๋งค๋ ์ง๊ณ ๊ฐ๋ฅ
2. ์๊ณ ๋ฆฌ์ฆ ํ๋ฆ๋
`1. ๋น ๋์ ๋๋ฆฌ ์์ฑ 2. ๊ฐ ์ฑ ์ ๋ ฅ ๋ฐ์ ๋๋ง๋ค:
- ๋์ ๋๋ฆฌ์ ํด๋น ์ฑ ์ด ์์ผ๋ฉด ํ๋งค๋ 1 ์ฆ๊ฐ
- ์์ผ๋ฉด ๋์ ๋๋ฆฌ์ ์๋ก ์ถ๊ฐํ๊ณ ํ๋งค๋ 1๋ก ์ค์
- ๋์ ๋๋ฆฌ ๊ฐ ์ค ์ต๋๊ฐ(๊ฐ์ฅ ๋ง์ด ํ๋ฆฐ ๊ถ์) ์ฐพ๊ธฐ
- ์ต๋๊ฐ๊ณผ ๊ฐ์ ํ๋งค๋์ ๊ฐ์ง ์ฑ ๋ค์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
- ๋ฆฌ์คํธ ์ฌ์ ์ ์ ๋ ฌ
- ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์ ์ถ๋ ฅ`
๐งฉ ์ฝ๋ ๊ตฌํ๊ณผ ์ค๋ช
1. ์ ๋ ฅ ์ฒ๋ฆฌ์ ๋์ ๋๋ฆฌ ์ด๊ธฐํ
import sys
input = sys.stdin.readline
d = dict()
for _ in range(int(input())):
book = input().rstrip()
if book in d:
d[book] += 1
else:
d[book] = 1
โ sys.stdin.readline์ ์ฌ์ฉํด ์ ๋ ฅ ์๋ ๊ฐ์
โ ๋์ ๋๋ฆฌ๋ฅผ ์ด์ฉํด ์ฑ ์ ๋ชฉ๊ณผ ํด๋น ์ฑ ์ ํ๋งค๋์ ๊ธฐ๋ก
2. ์ต๋ค ํ๋งค ์ฑ ์ฐพ๊ธฐ
m = max(d.values())
candidates = []
for k, v in d.items():
if v == m:
candidates.append(k)
candidates.sort()
print(candidates[0])
โ **d.values()**๋ก ๋ชจ๋ ํ๋งค๋์ ๊ฐ์ ธ์ ๊ทธ ์ค ์ต๋๊ฐ์ ์ฐพ์
โ ์ต๋ค ํ๋งค๋๊ณผ ์ผ์นํ๋ ์ฑ ๋ค์ ํ๋ณด ๋ฆฌ์คํธ์ ์ถ๊ฐ
โ ํ๋ณด ๋ฆฌ์คํธ๋ฅผ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ฒซ ๋ฒ์งธ ์์ ์ถ๋ ฅ
import sys
input = sys.stdin.readline
d = dict()
for _ in range(int(input())):
book = input().rstrip()
if book in d:
d[book] += 1
else:
d[book] = 1
# print(d)
# 5
# top
# top
# top
# top
# kimtop
# {'top': 4, 'kimtop': 1}
m = max(d.values())
candidates = []
# print(m) # 4
for k,v in d.items():
if v == m:
candidates.append(k)
candidates.sort()
print(candidates[0])
๐ ์์ ์คํ ๊ณผ์
1. ์์ ์ ๋ ฅ 1 ์คํ ๊ณผ์
โ ์ ๋ ฅ: “top” 4๋ฒ, “kimtop” 1๋ฒ
โ ๋์
๋๋ฆฌ ์ํ: {'top': 4, 'kimtop': 1}
โ ์ต๋ ํ๋งค๋: 4๊ถ
โ ํ๋ณด ๋ฆฌ์คํธ: ['top']
โ ์ถ๋ ฅ: “top”
2. ์์ ์ ๋ ฅ 3 ์คํ ๊ณผ์
โ ์ ๋ ฅ: “a” 3๋ฒ, “b” 3๋ฒ
โ ๋์
๋๋ฆฌ ์ํ: {'a': 3, 'b': 3}
โ ์ต๋ ํ๋งค๋: 3๊ถ
โ ํ๋ณด ๋ฆฌ์คํธ: ['a', 'b']
โ ์ ๋ ฌ ํ: ['a', 'b']
โ ์ถ๋ ฅ: “a”
๐ ํต์ฌ ํฌ์ธํธ ์ ๋ฆฌ
1. ์๋ฃ๊ตฌ์กฐ ํ์ฉ
โ ๋์ ๋๋ฆฌ๋ ํค-๊ฐ ์์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์ฑ ์ ๋ชฉ๊ณผ ํ๋งค๋์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
โ ์๊ฐ ๋ณต์ก๋: ๋ฐ์ดํฐ ๊ฒ์/์ฝ์ /์ญ์ ๋ชจ๋ O(1) (ํ๊ท )
2. ํ์ด์ฌ ๊ธฐ๋ณธ ํจ์ ํ์ฉ
โ max() ํจ์๋ก ์ต๋๊ฐ ์ฐพ๊ธฐ
โ sort() ๋ฉ์๋๋ก ์ฌ์ ์ ์ ๋ ฌ
โ dict.items(), dict.values() ๋ฉ์๋๋ก ๋์ ๋๋ฆฌ ๋ฐ์ดํฐ ์ ๊ทผ
3. ์กฐ๊ฑด ์ฒ๋ฆฌ
โ ๋์ผํ ํ๋งค๋์ ๊ฐ์ง ์ฑ ์ด ์ฌ๋ฌ ๊ถ์ผ ๊ฒฝ์ฐ ์ฌ์ ์ ์ ๋ ฌ์ ํตํด ํด๊ฒฐ
โ ํ๋งค๋ ์ฑ ์ด ํ ์ข ๋ฅ์ผ ๊ฒฝ์ฐ์๋ ์ ์ ์๋
๐ฏ ์์ฉ ๋ฐ ํ์ฅ ๊ฐ๋ฅ์ฑ
1. ๋ค์ํ ์ ๋ ฌ ๊ธฐ์ค ์ ์ฉ
โ ํ๋งค๋์ด ๊ฐ์ ๋ ๋ค๋ฅธ ๊ธฐ์ค(์: ๊ฐ๊ฒฉ, ์ถ๊ฐ์ผ)์ผ๋ก ์ ๋ ฌํ๋๋ก ํ์ฅ ๊ฐ๋ฅ
โ ๋ณตํฉ ์ ๋ ฌ ๊ธฐ์ค ์ ์ฉ: candidates.sort(key=lambda x: (x[1], x))
2. ์ค๋ฌด ํ์ฉ
โ ์ค์ ์์ POS ์์คํ ์์์ ๋ฒ ์คํธ์ ๋ฌ ์ง๊ณ ๋ก์ง์ผ๋ก ํ์ฉ ๊ฐ๋ฅ
โ ๋ฐ์ดํฐ ๋ถ์์์ ๋น๋์ ๊ธฐ๋ฐ ์ฒ๋ฆฌ์ ์์ฉ ๊ฐ๋ฅ
์ด ๋ฌธ์ ๋ ๋์ ๋๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ ํน์ฑ์ ์ ํ์ฉํ ๋ฌธ์ ๋ก, ์ค์ํ์ ๋ฐ์ดํฐ ์ง๊ณ ์ํฉ์์๋ ์ ์ฌํ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํ ์ ์์ต๋๋ค.