[λ°±μ€€]  후보 μΆ”μ²œν•˜κΈ° / 1713번 / 파이썬 / Python / defaultdict
Algorithm/Baekjoon

[λ°±μ€€] 후보 μΆ”μ²œν•˜κΈ° / 1713번 / 파이썬 / Python / defaultdict

728x90
λ°˜μ‘ν˜•

 

πŸ’‘solutions )

πŸ’¬ defaultdict μ‚¬μš© -> collections λͺ¨λ“ˆμ˜ defaultdictλŠ” λ”•μ…”λ„ˆλ¦¬μ™€ 거의 λΉ„μŠ·ν•˜μ§€λ§Œ key값이 없을 경우 미리 지정해 놓은 초기(default)값을 λ°˜ν™˜ν•˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€. -> κ·Έλž˜μ„œ 쑰건문을 톡해 get()λ©”μ†Œλ“œλ‘œ 킀값이 μžˆλŠ”μ§€ ν™•μΈν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” νŽΈλ¦¬ν•¨μ΄ μžˆλ‹€.
πŸ’¬ λ°˜λ³΅λ¬Έμ—μ„œ μΆ”μ²œ 리슀트의 μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© λ½‘μ•„μ„œ 사진틀 리슀트(photo)에 μžˆλŠ” 지 λ¨Όμ € ν™•μΈν•˜κΈ°

πŸ’¬ λΉ„μ–΄μžˆλŠ” 사진틀 μœ λ¬΄μ— 따라 λΆ„κΈ° 처리 -> λΉ„μ–΄μžˆλŠ” 사진틀이 μ—†λ‹€λ©΄ photo λ¦¬μŠ€νŠΈμ— κ°€μž₯ 적은 μΆ”μ²œμ„ 받은 번호의 학생을 μ°ΎκΈ° -> ν•΄λ‹Ή 번호의 학생 photo λ¦¬μŠ€νŠΈμ—μ„œ μ‚­μ œ, λ™μ‹œμ— r_dicμ—μ„œλ„ μ‚­μ œν•˜μ—¬ μΆ”μ²œνšŸμˆ˜ μ΄ˆκΈ°ν™”(0)

 

🎫code )

from collections import defaultdict

r_dic = defaultdict(int)
n = int(input())
r_cnt = int(input())
r_lst = input().split(' ')
photo = []

for item in r_lst:
    r_dic[item] += 1
    if item in photo:
        continue
        
    elif len(photo) < n:  # λ‹€ 차지 μ•Šμ€ μƒνƒœ
        photo.append(item)
        
    elif len(photo) == n:  # 꽉 μ°¨ μžˆλŠ” μƒνƒœ
        min_v = 10000
        for k in photo:
            if r_dic[k] < min_v:
                min_v = r_dic[k]
                d = k
        else:
            photo.remove(d)
            del(r_dic[d])
            photo.append(item)
            
photo = list(map(int, photo))
photo.sort()
print(*photo)

 

πŸ“Œ description )

문제좜처 : www.acmicpc.net/problem/1713

 

1713번: 후보 μΆ”μ²œν•˜κΈ°

첫째 μ€„μ—λŠ” μ‚¬μ§„ν‹€μ˜ 개수 N이 주어진닀. (1≤N≤20) λ‘˜μ§Έ μ€„μ—λŠ” 전체 ν•™μƒμ˜ 총 μΆ”μ²œ νšŸμˆ˜κ°€ 주어지고, μ…‹μ§Έ μ€„μ—λŠ” μΆ”μ²œλ°›μ€ 학생을 λ‚˜νƒ€λ‚΄λŠ” λ²ˆν˜Έκ°€ 빈 칸을 사이에 두고 μΆ”μ²œλ°›μ€ μˆœμ„œλŒ€λ‘œ οΏ½

www.acmicpc.net

문제

μ›”λ“œμ΄ˆλ“±ν•™κ΅ ν•™μƒνšŒμž₯ ν›„λ³΄λŠ” 일정 κΈ°κ°„ λ™μ•ˆ 전체 ν•™μƒμ˜ μΆ”μ²œμ— μ˜ν•˜μ—¬ 정해진 수만큼 μ„ μ •λœλ‹€. κ·Έλž˜μ„œ 학ꡐ ν™ˆνŽ˜μ΄μ§€μ— μΆ”μ²œλ°›μ€ ν•™μƒμ˜ 사진을 κ²Œμ‹œν•  수 μžˆλŠ” 사진틀을 ν›„λ³΄μ˜ 수만큼 λ§Œλ“€μ—ˆλ‹€. μΆ”μ²œλ°›μ€ ν•™μƒμ˜ 사진을 사진틀에 κ²Œμ‹œν•˜κ³  μΆ”μ²œλ°›μ€ 횟수λ₯Ό ν‘œμ‹œν•˜λŠ” κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  1. 학생듀이 μΆ”μ²œμ„ μ‹œμž‘ν•˜κΈ° 전에 λͺ¨λ“  사진틀은 λΉ„μ–΄μžˆλ‹€.
  2. μ–΄λ–€ 학생이 νŠΉμ • 학생을 μΆ”μ²œν•˜λ©΄, μΆ”μ²œλ°›μ€ ν•™μƒμ˜ 사진이 λ°˜λ“œμ‹œ 사진틀에 κ²Œμ‹œλ˜μ–΄μ•Ό ν•œλ‹€.
  3. λΉ„μ–΄μžˆλŠ” 사진틀이 μ—†λŠ” κ²½μš°μ—λŠ” ν˜„μž¬κΉŒμ§€ μΆ”μ²œ 받은 νšŸμˆ˜κ°€ κ°€μž₯ 적은 ν•™μƒμ˜ 사진을 μ‚­μ œν•˜κ³ , κ·Έ μžλ¦¬μ— μƒˆλ‘­κ²Œ μΆ”μ²œλ°›μ€ ν•™μƒμ˜ 사진을 κ²Œμ‹œν•œλ‹€. μ΄λ•Œ, ν˜„μž¬κΉŒμ§€ μΆ”μ²œ 받은 νšŸμˆ˜κ°€ κ°€μž₯ 적은 학생이 두 λͺ… 이상일 κ²½μš°μ—λŠ” κ·ΈλŸ¬ν•œ 학생듀 쀑 κ²Œμ‹œλœ 지 κ°€μž₯ 였래된 사진을 μ‚­μ œν•œλ‹€.
  4. ν˜„μž¬ 사진이 κ²Œμ‹œλœ 학생이 λ‹€λ₯Έ ν•™μƒμ˜ μΆ”μ²œμ„ 받은 κ²½μš°μ—λŠ” μΆ”μ²œλ°›μ€ 횟수만 μ¦κ°€μ‹œν‚¨λ‹€.
  5. 사진틀에 κ²Œμ‹œλœ 사진이 μ‚­μ œλ˜λŠ” κ²½μš°μ—λŠ” ν•΄λ‹Ή 학생이 μΆ”μ²œλ°›μ€ νšŸμˆ˜λŠ” 0으둜 바뀐닀.

ν›„λ³΄μ˜ 수 즉, μ‚¬μ§„ν‹€μ˜ κ°œμˆ˜μ™€ 전체 ν•™μƒμ˜ μΆ”μ²œ κ²°κ³Όκ°€ μΆ”μ²œλ°›μ€ μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ΅œμ’… 후보가 λˆ„κ΅¬μΈμ§€ κ²°μ •ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 μ€„μ—λŠ” μ‚¬μ§„ν‹€μ˜ 개수 N이 주어진닀. (1≤N≤20) λ‘˜μ§Έ μ€„μ—λŠ” 전체 ν•™μƒμ˜ 총 μΆ”μ²œ νšŸμˆ˜κ°€ 주어지고, μ…‹μ§Έ μ€„μ—λŠ” μΆ”μ²œλ°›μ€ 학생을 λ‚˜νƒ€λ‚΄λŠ” λ²ˆν˜Έκ°€ 빈 칸을 사이에 두고 μΆ”μ²œλ°›μ€ μˆœμ„œλŒ€λ‘œ 주어진닀. 총 μΆ”μ²œ νšŸμˆ˜λŠ” 1,000번 μ΄ν•˜μ΄λ©° 학생을 λ‚˜νƒ€λ‚΄λŠ” λ²ˆν˜ΈλŠ” 1λΆ€ν„° 100κΉŒμ§€μ˜ μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

사진틀에 사진이 게재된 μ΅œμ’… ν›„λ³΄μ˜ 학생 번호λ₯Ό μ¦κ°€ν•˜λŠ” μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•œλ‹€.

 

λ°˜μ‘ν˜•