https://www.acmicpc.net/problem/20006
p, m = map(int, input().split())
arr = []
for _ in range(p):
lev, name = map(str, input().split())
lev = int(lev)
is_Join = False
for i in range(len(arr)):
if arr[i][0][0] - 10 <= lev <= arr[i][0][0]+10:
if len(arr[i]) <= m-1:
arr[i].append([lev, name])
is_Join = True
break
arr[i].append([lev, name])
is_Join = True
if len(arr[i]) >= m:
print('Started!')
room = arr.pop(i)
room.sort(key=lambda x: (x[1]))
for k in room:
print(k[0], k[1])
# print(room[k][0], room[k][1])
break
if is_Join == False:
arr.append([[lev, name]])
처음 제출한 코드이다.
우선 이 문제의 조건을 보자마자 구현으로 풀어도 충분하겠다 생각했고 즉시 실행에 옮겼다.
이 코드는 유저가 참여하자마자 방의 인원을 세고 인원이 m명이 되었다면 "Started!"를 출력해 방의 인원을 출력한다.
그러나 문제가 원하는 답은 모든 유저가 각 방에 참여한 "후" 방을 검사해 waiting 또는 started를 출력하는 것이다...
이것때문에 무엇이 틀렸는지 한참을 찾았다.
p, m = map(int, input().split())
arr = []
for _ in range(p):
lev, name = map(str, input().split())
lev = int(lev)
is_Join = False
for i in range(len(arr)):
if arr[i][0][0] - 10 <= lev <= arr[i][0][0]+10:
if len(arr[i]) <= m-1:
arr[i].append([lev, name])
is_Join = True
break
# arr[i].append([lev, name])
# is_Join = True
# if len(arr[i]) >= m:
# print('Started!')
# room = arr.pop(i)
# room.sort(key=lambda x: (x[1]))
# for k in room:
# print(k[0], k[1])
# # print(room[k][0], room[k][1])
# break
if is_Join == False:
arr.append([[lev, name]])
for room in arr:
if len(room) >= m:
print('Started!')
room.sort(key=lambda x: x[1])
for userinfo in room:
print(userinfo[0], userinfo[1])
else:
print('Waiting!')
room.sort(key=lambda x: x[1])
for userinfo in room:
print(userinfo[0], userinfo[1])
문제 조건에 맞게 수정한 코드이다.
역시... 문제를 잘 봐야한다. 또 하나 배우고 간다.