μ•Œκ³ λ¦¬μ¦˜/κ΅¬ν˜„

[λ°±μ€€ 20006 πŸ₯ˆ] λž­ν‚Ήμ „ λŒ€κΈ°μ—΄

1eehyunji 2023. 10. 7. 19:37

https://www.acmicpc.net/problem/20006

 

20006번: λž­ν‚Ήμ „ λŒ€κΈ°μ—΄

λͺ¨λ“  μƒμ„±λœ 방에 λŒ€ν•΄μ„œ κ²Œμž„μ˜ μ‹œμž‘ μœ λ¬΄μ™€ 방에 λ“€μ–΄μžˆλŠ” ν”Œλ ˆμ΄μ–΄λ“€μ˜ 레벨과 아이디λ₯Ό 좜λ ₯ν•œλ‹€. μ‹œμž‘ μœ λ¬΄μ™€ ν”Œλ ˆμ΄μ–΄μ˜ 정보듀은 쀄 λ°”κΏˆμœΌλ‘œ κ΅¬λΆ„λ˜λ©° 레벨과 μ•„μ΄λ””λŠ” ν•œ μ€„μ—μ„œ 곡백

www.acmicpc.net

문제

μ’…μš΄μ΄λŠ” μš΄μ˜ν•˜λ˜ κ²Œμž„μ— λž­ν‚Ήμ „ κΈ°λŠ₯을 μΆ”κ°€ν•˜λ €κ³  ν•œλ‹€. ν”Œλ ˆμ΄μ–΄ κ°„μ˜ μ‹€λ ₯차이가 μžˆμ„ 수 있기 λ•Œλ¬Έμ— μž…μž₯을 μ‹ μ²­ν•˜λ©΄ μžμ‹ κ³Ό λΉ„μŠ·ν•œ 레벨의 ν”Œλ ˆμ΄μ–΄λ“€μ„ λ§€μΉ­ν•˜μ—¬ κ²Œμž„μ„ μ‹œμž‘ν•˜κ²Œ ν•˜λ €κ³  ν•œλ‹€.

ν”Œλ ˆμ΄μ–΄ κ°„ 맀칭을 ν•΄μ£ΌλŠ” μ‹œμŠ€ν…œμ€ λ‹€μŒκ³Ό κ°™λ‹€.

  1. ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯을 μ‹ μ²­ν•˜μ˜€μ„ λ•Œ 맀칭이 κ°€λŠ₯ν•œ 방이 μ—†λ‹€λ©΄ μƒˆλ‘œμš΄ 방을 μƒμ„±ν•˜κ³  μž…μž₯μ‹œν‚¨λ‹€. 이떄 ν•΄λ‹Ή λ°©μ—λŠ” 처음 μž…μž₯ν•œ ν”Œλ ˆμ΄μ–΄μ˜ λ ˆλ²¨μ„ κΈ°μ€€μœΌλ‘œ -10λΆ€ν„° +10κΉŒμ§€ μž…μž₯ κ°€λŠ₯ν•˜λ‹€.
  2. μž…μž₯ κ°€λŠ₯ν•œ 방이 μžˆλ‹€λ©΄ μž…μž₯μ‹œν‚¨ ν›„ 방의 정원이 λͺ¨λ‘ μ°° λ•ŒκΉŒμ§€ λŒ€κΈ°μ‹œν‚¨λ‹€.
    1. μ΄λ•Œ μž…μž₯이 κ°€λŠ₯ν•œ 방이 μ—¬λŸ¬ 개라면 λ¨Όμ € μƒμ„±λœ 방에 μž…μž₯ν•œλ‹€.
  3. 방의 정원이 λͺ¨λ‘ μ°¨λ©΄ κ²Œμž„μ„ μ‹œμž‘μ‹œν‚¨λ‹€.

ν”Œλ ˆμ΄μ–΄μ˜ 수 p, ν”Œλ ˆμ΄μ–΄μ˜ λ‹‰λ„€μž„ n, ν”Œλ ˆμ΄μ–΄μ˜ 레벨 l, λ°© ν•œκ°œμ˜ 정원 m이 μ£Όμ–΄μ‘Œμ„ λ•Œ μœ„μ™€ 같은 λ°©λ²•μœΌλ‘œ λ§€μΉ­ν•΄μ£Όκ³  μ΅œμ’…μ μœΌλ‘œ λ§Œλ“€μ–΄μ§„ 방의 μƒνƒœμ™€ μž…μž₯ ν”Œλ ˆμ΄μ–΄λ“€μ„ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μž.

μž…λ ₯

첫 번째 μ€„μ—λŠ” ν”Œλ ˆμ΄μ–΄μ˜ 수 p(1 ≤ p ≤ 300)와 방의 정원 m(1 ≤ m ≤ 300)κ°€ μ£Όμ–΄μ§„λ‹€.

두 번째 쀄뢀터 p개의 μ€„μ—λŠ” ν”Œλ ˆμ΄μ–΄μ˜ 레벨 l (1 ≤ l ≤ 500)κ³Ό λ‹‰λ„€μž„ n이 곡백을 두고 μ£Όμ–΄μ§„λ‹€.

μž…λ ₯된 μˆœμ„œλŒ€λ‘œ κ²Œμž„μ„ μ‹œμž‘ν•œλ‹€.

λ‹‰λ„€μž„μ€ μ€‘λ³΅λ˜μ§€ μ•ŠμœΌλ©° 곡백을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ λ˜μ–΄μžˆμœΌλ©° λ‹‰λ„€μž„μ˜ κΈΈμ΄λŠ” 16을 λ„˜μ§€ μ•ŠλŠ”λ‹€.

좜λ ₯

λͺ¨λ“  μƒμ„±λœ 방에 λŒ€ν•΄μ„œ κ²Œμž„μ˜ μ‹œμž‘ μœ λ¬΄μ™€ 방에 λ“€μ–΄μžˆλŠ” ν”Œλ ˆμ΄μ–΄λ“€μ˜ 레벨과 아이디λ₯Ό 좜λ ₯ν•œλ‹€. μ‹œμž‘ μœ λ¬΄μ™€ ν”Œλ ˆμ΄μ–΄μ˜ 정보듀은 쀄 λ°”κΏˆμœΌλ‘œ κ΅¬λΆ„λ˜λ©° 레벨과 μ•„μ΄λ””λŠ” ν•œ μ€„μ—μ„œ 곡백으둜 κ΅¬λΆ„λœλ‹€.

방은 μƒμ„±λœ μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•œλ‹€.

방에 μžˆλŠ” ν”Œλ ˆμ΄μ–΄λ“€μ˜ μ •λ³΄λŠ” λ‹‰λ„€μž„μ΄ μ‚¬μ „μˆœμœΌλ‘œ μ•žμ„œλŠ” ν”Œλ ˆμ΄μ–΄λΆ€ν„° 좜λ ₯ν•œλ‹€.

방이 μ‹œμž‘λ˜μ—ˆμœΌλ©΄ Started!λ₯Ό λŒ€κΈ° 쀑이면 Waiting!을 좜λ ₯μ‹œν‚¨λ‹€.

 

문제 풀이

  • 비ꡐ적 κ°„λ‹¨ν•œ λ‹¨μˆœ κ΅¬ν˜„λ¬Έμ œμ΄λ‹€!
import sys

p, m = map(int, sys.stdin.readline().split(' '))

# 첫번째 ν”Œλ ˆμ΄μ–΄μ˜ λ°© μΆ”κ°€
firstl, firstn=sys.stdin.readline().strip().split(' ')
rooms=[]
rooms.append([(int(firstl), firstn)])
for _ in range(p-1):
    level, nickname = sys.stdin.readline().strip().split(' ')
    level=int(level)
    # λ“€μ–΄κ°ˆ 수 μžˆλŠ” 방이 μ‘΄μž¬ν•˜λŠ” 경우
    # 1) 방의 인원이 m보닀 μž‘κ³ , 첫번째 μž…μž₯ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 레벨과의 차이가 -10~+10이라면
    for room_no in range(len(rooms)):
        room_level=rooms[room_no][0][0]
        room_user=len(rooms[room_no])
        if room_user<m and room_level-10<=level and level<=room_level+10:
            rooms[room_no].append((level, nickname))
            break
    # κΈ°μ‘΄ λ°© 쀑에 λ“€μ–΄κ°ˆ 수 μžˆλŠ” 방이 μ—†λ‹€λ©΄
    else:
        rooms.append([(level, nickname)])

for room in rooms:
    if len(room)==m:
        print("Started!")
        room.sort(key=lambda x:x[1])
        for player in room:
            print(player[0], player[1])
    else:
        print("Waiting!")
        room.sort(key=lambda x: x[1])
        for player in room:
            print(player[0], player[1])