๐Ÿงฉ Algorithm/SWEA

[SWEA] 1204. ์ตœ๋นˆ์ˆ˜ ๊ตฌํ•˜๊ธฐ (Python/D2)

devCloud 2023. 11. 2. 19:25
728x90
 

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์ฐจ๋งŒ์— ํŒจ์Šคํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

ํŒจ์Šคํ•˜๊ณ  ๋‚˜์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ดค๋Š”๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๊ณผ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์‹œ๊ฐ„๋ณต์žก๋„, ๊ณต๊ฐ„๋ณต์žก๋„ ๋ฉด์—์„œ ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋๋‹ค. ๋ฌผ๋ก  ํŒŒ์ด์ฌ์˜ ์ทจ์ง€์™€๋Š” ๋งž์ง€ ์•Š์ง€๋งŒ ๊ฐ€๋”์€ ๋ณต์žก๋„๋„ ๊ณ ๋ คํ•˜๋ฉด์„œ ๊ตฌํ˜„์„ ํ•ด์•ผ๊ฒ ๋‹ค.

728x90