링크 : https://www.acmicpc.net/problem/20006
20006번: 랭킹전 대기열
모든 생성된 방에 대해서 게임의 시작 유무와 방에 들어있는 플레이어들의 레벨과 아이디를 출력한다. 시작 유무와 플레이어의 정보들은 줄 바꿈으로 구분되며 레벨과 아이디는 한 줄에서 공백
www.acmicpc.net
- 문제
- 소요시간: 35분 10초



- 설계하기(접근방법)
1. 입력받기
종료 조건이 없으므로
try: while True
except EOFError 을 사용해서
파일의 입력이 끝났을 경우 종료를 해준다
원래 방을 만드려면 조건을 비교하여 만들어주어야 하지만
아직 첫 방이 생성되지 않았기 때문에
처음 입력은 그냥 방을 만들어준다
2. 구현하기
레밸과 닉네임을 입력받는다
첫 방과 레벨을 비교한다, 만약 -10 ~ +10 사이이고, 방의 인원이 초과되지 않는경우 -> 방에 넣어준다
만약 레벨을 벗어나거나 초과되는 경우 다음방과 비교를 한다
모든 방과 비교했는데 들어갈 방이 없는 경우, 새로운 방을 생성해준다
출력 조건에 닉네임을 사전 순으로 출력하라고 했으니,
각각의 방에 대해서 람다식을 적용하여 정렬해준다
그 후
방의 인원이 정원과 같은 경우
Started!를 출력하고
아닌 경우
Waiting!을 출력한 후
방의 구성원을 출력한다
- 코드(출력)
player, room_max = map(int, input().split())
room_list=[]
## 첫 방 만들기
level, nick = input().split()
level = int(level)
room_list.append([[level, nick]])
## 대기열 만들기
try:
while True:
success = 0
level, nick = input().split()
level = int(level)
for i in room_list:
if level <= i[0][0] + 10 and level >= i[0][0] - 10 and len(i) < room_max:
i.append([level, nick])
success = 1
break
if success == 0:
room_list.append([[level, nick]])
except EOFError:
pass
for i in range(len(room_list)):
room_list[i] = sorted(room_list[i], key = lambda x: (x[1],x[0]))
for i in room_list:
if len(i) == room_max:
print('Started!')
else:
print('Waiting!')
for j in i:
print(j[0], j[1])
- 얻어갈 부분
1. 종료조건이 없는 문제에 대해서는 EOFError 문을 통해서 입력받자
2. 이중 배열 내의 리스트에 대해서 람다식을 적용하는 방법을 배웠다.
'알고리즘(백준) > 구현' 카테고리의 다른 글
| [알고리즘/구현] 14503번 : 로봇 청소기 - python (1) | 2023.12.29 |
|---|---|
| [알고리즘/구현] 1138번 : 한 줄로 서기 - python (0) | 2023.12.29 |
| [알고리즘/구현] 2852번 : NBA 농구 - python (1) | 2023.12.29 |
| [알고리즘/구현] 10709번 : 기상캐스터 - python (1) | 2023.12.28 |
| [알고리즘/구현] 1205번 : 등수 구하기 - python (0) | 2023.12.28 |