Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- springboot
- GC
- 백준
- 브루트포스
- 면접복기
- 빌더패턴
- github
- 몬티홀
- g1gc
- 그리디
- deque
- 프로세스
- 적정 스레드
- 회고
- DP
- 이진탐색
- 그래프탐색
- 마크다운
- 배열 돌리기1
- GarbageCollector
- Greedy
- 분할정복
- 문제풀이
- 구현
- Markdown
- BFS
- Stack
- Python
- 그래프 탐색
- 정수론
Archives
- Today
- Total
FeelingXD
[백준-20006] 랭킹전 대기열 본문
❓ Problem
🤔 How
- 방을 생성하는 조건
- 방을 순회하여 입장할수 있는 적합 한 방이없을경우 현재플레이어를 방장으로하는 새로운 방을 만든다.
- 적합한 방의조건
- 현재 플레이어와 방장의 레벨차가 10 이하인 경우
- 방이 최대인원수보다 적은경우
- 갱신 여부를 체크하는 변수를 두어서 현재 플레이어가 입장했을경우 새로운 방을 생성하지않고 적합한 방이없는경우 새로운방을 생성하도록한다.
❗ Solve
# 랭킹전 대기열
import sys
input = sys.stdin.readline
START = "Started!"
WAIT = "Waiting!"
def print_rooms(rooms):
"""
방을 순회하며 출력
플레이어 인원은 닉네임이 사전순으로 앞서는 플레이어를 출력해야함
"""
for room in rooms:
room.sort(key=lambda x: x[1])
print(START if len(room) >= m else WAIT)
for player in room:
print(*player)
def solution():
global m
p, m = map(int, input().split()) # 플레이어수 , 방의 최대 인원
rooms = []
for _ in range(p):
c_player = list(input().split()) # 현재 플레이어 (레벨, 닉네임)
renewal = False # 갱신 여부를 체크
for i, room in enumerate(rooms): # 방을 순회하며 적합한 방을찾음
"""
적합한 방을 찾는 조건
1. 생성자의 레벨과 10 이상 차이가 날수 없음
2. 방 최대인원을 초과 할 수 없음
"""
if (
len(room) >= m or abs(int(c_player[0]) - int(room[0][0])) > 10
): # 방 인원수 초과 하거나 생성자 레벨과의 차이가 10보다 클경우
continue
else: # 적합한 방을 찾은 경우
renewal = True
tmp_room = room + [c_player]
rooms[i] = tmp_room
break
if not renewal: # 적합한 방을 찾지 못한 경우 새로운 방을 생성함
tmp_room = [c_player]
rooms.append(tmp_room)
print_rooms(rooms)
pass
if __name__ == "__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[백준 -1992] 쿼드트리 (0) | 2024.02.26 |
---|---|
[백준-17609] 회문 (0) | 2024.02.20 |
[백준-16946] 벽 부수고 이동하기 4 🧱🔨 (0) | 2024.01.30 |
[백준-1331] 나이트 투어 (0) | 2024.01.28 |
[백준-31246] 모바일 광고 입찰 💸 (0) | 2024.01.18 |