SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
์ค๋ช
1000๋ช ์ ํ์๋ค ์ ์ ์ค ์ต๋น์(๊ฐ์ฅ ๋ง์ด ๋ํ๋๋ ๊ฐ)๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
๋ค๋ง, ์ต๋น์๊ฐ ์ฌ๋ฌ ๊ฐ ์ผ ๋์๋ ๊ฐ์ฅ ํฐ ์ ์๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.
๊ฐ ํ
์คํธ ์ผ์ด์ค์ ์ฒซ ์ค์๋ ์ผ์ด์ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๊ณ , ๊ทธ ๋ค์์ค๋ถํฐ๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
ํ์ด
1. ์ด 1000๋ช ์ ํ์ํด์ผ ํ๋๋ฐ ๋ฐ์ดํฐ๊ฐ ๋ง์์ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
2. collections ๋ชจ๋์ Counter ํจ์๋ฅผ ์ฌ์ฉํ๋ค. counter ํจ์๋ ๊ฐ์ ๊ฐ๋ผ๋ฆฌ ๋ฌถ๊ณ ๊ทธ ๊ฐ์๋ฅผ ์ผ๋ค.
3. counterํ ํ values ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํ๋ค.
4. ์ ๋ ฌํ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ ์ต๋๊ฐ์ด ๋๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ key๊ฐ์ ์ถ๋ ฅํ๋ค.
• collection.Counter(list) - ๊ฐ์ ๊ฐ๋ผ๋ฆฌ ๋ฌถ์ด์ ๊ทธ ๊ฐ์๋ฅผ ์ผ๋ค. ๊ฒฐ๊ณผ๊ฐ์ dictionary ํํ๋ก ๋ฐํํ๋ค.
- import collections๋ฅผ ํ ๊ฒฝ์ฐ collections.Counter(list) ๋ผ๊ณ ์์ฑํด์ผ ํ๊ณ , from collections import Counter์ ํ ๊ฒฝ์ฐ collections์ ์์ฑํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋ค.
- ๊ฒฐ๊ณผ๊ฐ ์์ - Counter({4: 4, 5: 2, 1: 1, 3: 1, 2: 1, 6: 1, 66: 1})
• sorted(Counter(list).items(), key=lambda pair:pair[i]) - ์นด์ดํฐ ํ ๋ฆฌ์คํธ๋ ์ ๋ ฌํ ์ ์๋ค. ๋์ ๋๋ฆฌ์๋ ์กฐ๊ธ ๋ค๋ฅธ ํํ์ด๋ค.
- ๋ฆฌ์คํธ์ items๋ฅผ ๊ฐ์ ธ์์ ๊ฐ item์ key ํน์ value์ ํด๋นํ๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค.
- i ์๋ฆฌ์ 0์ ๋ฃ์ผ๋ฉด key๊ฐ์, 1์ ๋ฃ์ผ๋ฉด value๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค.
- ๋งจ ๋ค์ ์ธ์๋ก reverse=True๋ฅผ ๋ฃ์ผ๋ฉด ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ๋๋ค.
• ์นด์ดํธ ํ ๋ฆฌ์คํธ[i][j] - i ์๋ฆฌ์๋ ์ธ๋ฑ์ค, j ์๋ฆฌ์๋ key๊ฐ ํน์ value๋ฅผ ์ง์ ํ ์ ์๋ค.
- count_score[0][1] ์ผ ๋, ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ value๋ฅผ ์ถ์ถํ ์ ์๋ค. ์์ ๊ฒฐ๊ณผ๊ฐ ์์์์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ ({4: 4})์์ value๊ฐ์ธ 4๊ฐ ์ถ๋ ฅ๋๋ค.
- count_score[1][0] ์ผ ๋, ๋ ๋ฒ์งธ ์ธ๋ฑ์ค์ key๋ฅผ ์ถ์ถํ ์ ์๋ค. ์์ ๊ฒฐ๊ณผ๊ฐ ์์์์ ๋ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ ({5:2})์์ key๊ฐ์ธ 5๊ฐ ์ถ๋ ฅ๋๋ค.
Solution
from collections import Counter
t = int(input())
for _ in range(t):
test_number = int(input())
ans = 0
count_score = []
score = list(map(int, input().split()))
count_score = Counter(score) #๋ฆฌ์คํธ ๊ฐ๋ค์ ์นด์ดํธํ๊ณ ์ ์ฅํ๋ค.
count_score = sorted(count_score.items(), key=lambda pair: pair[1], reverse=True) #value ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
ans = count_score[0][0] #์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ key๊ฐ(์ ์)
print("#"+str(test_number), ans)
๋ค๋ฅธ ํ์ด(๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ ์์์ ๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ)
for i in range(1, int(input()) + 1):
_ = input()
score = list(map(int, input().split()))
freq = [0] * 101 #0~100์ ๊น์ง์ ๋น๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฆฌ์คํธ
ans = 0 #์ต๋น์
for grade in score:
freq[grade] += 1 #ํ์ฌ์ ์์ ๋น๋์์น
if freq[grade] >= freq[ans]: #ํ์ฌ์ ์์ ๋น๋์๊ฐ ์ต๋น์๋ณด๋ค ํด ๋
ans = grade #ํ์ฌ ์ ์๋ฅผ ์ต๋น์์ ์ ์ฅ
print(f"#{i} {ans}")
๐ฉ๐ป ํ๊ณ
counter ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ๋์, '์ต๋น์๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๋ ๊ฐ์ฅ ํฐ ์ ์๋ฅผ ์ถ๋ ฅ'ํด์ผ ์กฐ๊ฑด์ ๋ฐ๋ผ์ max ํจ์๋ฅผ ์ผ๋๋ฐ key์ ์ต๋๊ฐ์ด ์ถ๋ ฅ์ด ๋๋ค. ๋น๋์ ์๊ด์์ด ์๋ ์ ์ ๋ฆฌ์คํธ์ ์ต๋๊ฐ์ด ๋ฐํ๋๋ ๋ฌธ์ ๊ฐ ์์ด์ values() ํจ์์ ๋น๋์๊ฐ ๋ง์ ์์ ์๋๋ก ์ ๋ ฌ๋๋ most_common() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ์ ๋ผ์ sorted()๋ฅผ ์ฌ์ฉํด์ value ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ๋๊ฒ ๋ง๋ค์๋ค. ์ฒ์์ sorted์ ์ธ์๋ฅผ ๋๊ฐ์ด ์ฌ์ฉํ๋๋ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ ๊ตฌ๊ธ๋งํด์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๊ฒ ๋๋ค.
1์ฐจ, 2์ฐจ ์ ์ถ์ ์คํจํ์๋๋ฐ 1์ฐจ ์ ์ถ ๋๋ print์ ํ ์คํธ ์ผ์ด์ค ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋๋ฅผ ๋ฃ์ง ์์๊ณ , values๋ฅผ ์ฌ์ฉํ๋ฉด key๊ฐ์ ์ถ๋ ฅํ์ง ๋ชปํ๋ ๋ฌธ์ ๋๋ฌธ์ ์คํจํ๋ค. ๊ทธ๋์ ์ ๋ ฌํ ํ์ key๊ฐ์ ์ถ๋ ฅํ๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ 2์ฐจ ์ ์ถ์๋ ์คํจํ๋๋ฐ ๊ทธ ์ด์ ๋ value๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ผ ํ๋๋ฐ key ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ํด๋ฒ๋ฆฐ ๊ฒ์ด๋ค. ๋คํํ ๋ฌธ์ ์ ์ ๋ฐ๋ก ์ฐพ๊ฒ ๋ผ์ 3์ฐจ๋ง์ ํจ์คํ ์ ์์๋ค.
ํจ์คํ๊ณ ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ๋ดค๋๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ๊ณผ ์์ํ๊ฒ ๊ตฌํํ๋ ๊ฒ์ด ์๊ฐ๋ณต์ก๋, ๊ณต๊ฐ๋ณต์ก๋ ๋ฉด์์ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋๋ค. ๋ฌผ๋ก ํ์ด์ฌ์ ์ทจ์ง์๋ ๋ง์ง ์์ง๋ง ๊ฐ๋์ ๋ณต์ก๋๋ ๊ณ ๋ คํ๋ฉด์ ๊ตฌํ์ ํด์ผ๊ฒ ๋ค.
'๐งฉ Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SWEA] 1926. ๊ฐ๋จํ 369๊ฒ์ (Python/D2) (1) | 2023.11.07 |
|---|---|
| [SWEA] 1970. ์ฌ์ด ๊ฑฐ์ค๋ฆ๋ (Python/D2) (2) | 2023.11.06 |
| [SWEA] 1983. ์กฐ๊ต์ ์ฑ์ ๋งค๊ธฐ๊ธฐ (Python/D2) (2) | 2023.11.02 |
| [SWEA] 1984. ์ค๊ฐ ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ (Python/D2) (1) | 2023.11.01 |
| [SWEA] 1966. ์ซ์๋ฅผ ์ ๋ ฌํ์ (Python/D2) (2) | 2023.10.31 |