본문 바로가기
알고리즘/Python

[알고리즘] python(파이썬) - 랭킹전 대기열

by 조이은 2023. 6. 7.

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

 

20006번: 랭킹전 대기열

모든 생성된 방에 대해서 게임의 시작 유무와 방에 들어있는 플레이어들의 레벨과 아이디를 출력한다. 시작 유무와 플레이어의 정보들은 줄 바꿈으로 구분되며 레벨과 아이디는 한 줄에서 공백

www.acmicpc.net

백준 20006번 : 랭킹전 대기열

 

 

접근 방식
1. 먼저 입력받은 모든 사용자의 레벨과 닉네임을 묶어 people이라는 리스트에 저장한다.
2. 사용자의 리스트를 돌면서, 들어갈 수 있는 방이 있는지 검색한다.
   2-1. 들어갈 수 있는 방이 없다면, 처음 들어가는 사용자의 레벨과 [레벨, 닉네임]을 묶어 rooms이라는 리스트에         저장한다. 
   2-2. 들어갈 수 있는 방이 있다면, 해당 방의 리스트에 현재 사용자의 [레벨,닉네임]을 묶어 연결하여 저장한다.
3. rooms 리스트를 돌면서, 사용자 닉네임의 사전순으로 정렬하고 순서대로 출력한다.  

 

 

코드 (해결 못함)
p, m = map(int, input().split())
rooms = []
people = []

#일단 입력받음
for i in range(p) :
    level, name = input().split()
    people.append([int(level), name])
    
    
for level, name in people:
    flag = False #들어간지, 들어가지않은지 확인하기 위한 플래그
    
    #방을 돌면서 검색함
    for i in range(len(rooms)):
        
        if len(rooms[i][1]) == m:
            continue
        
        # 들어갈 수 있는 방이 있음
        if abs(level-rooms[i][0]<=10):
            flag = True
            rooms[i][1].append([level, name])
            break
            
    # 대기방에 들어 갈 수 없으면 새로운 방 생성
    if not flag:
        rooms.append([level, [[level, name]]])   
        
        
for room in range(len(rooms)) :
    if len(rooms[room][1]) == m :
        print('Started!')
        for i in range(len(rooms[room][1])) :
            print(rooms[room][1][i][0], rooms[room][1][i][1])
        
    else :
        print('Waiting!')
        
        for i in range(len(rooms[room][1])) :
            print(rooms[room][1][i][0], rooms[room][1][i][1])

 

해결하지 못한 이유... 정렬이 되지 않는다 ㅜ

sort와 lambda 사용해서 계속해서 정렬해보려 했는데 정렬이 안된다... 이유를 모르겠다 그것만 해결하면 완벽한데 ㅠㅠ

어 떻 게 해야될 까요... . . .