[프로그래머스]-예상 대진표

이정연·2022년 10월 21일
0

CodingTest

목록 보기
75/165

문제 링크

CODE

"""
    1 vs 2 || 3 vs 4 || 5 vs 6 || 7 vs 8 [Round 1]
        1 vs 4    ||   5 vs 7   [Round 2]
            4     vs    7   [Round 3]
            큐를 쓰면 될 듯 ?!!!
"""
from collections import deque
def solution(n,a,b):
    target = [a,b]
    q = deque([(i,1) for i in range(1,n+1)])
    while q:
        first = q.popleft()
        second = q.popleft()
        if first[0] in target and second[0] in target:
            return first[1]
        elif first[0] in target:
            q.append((first[0],first[1]+1))
        elif second[0] in target:
            q.append((second[0],second[1]+1))
        else:
            q.append((first[0],first[1]+1))

대략적인 동작 과정을 설명하자면 ...
(사람 번호, 스테이지) 순서쌍으로 큐를 돌린다.

2개씩 빼주면서 확인을 하는데, 경우의 수가 총 3개가 있다.

  • 2개가 a,b인경우
  • 1개만 a,b인 경우
  • a,b가 없는 경우

2개 모두 a,b라면 원하는 대진을 찾은 것이므로 현재 스테이지를 리턴한다.
a,b가 1개만 있는 경우라면 그 사람을 승리시키고 스테이지를 올린다.
둘 다 없다면 아무나 승리시키고(나는 첫 번째 사람을 승리시켰다) 스테이지를 올린다.

BEST CODE

def solution(n,a,b):
    return ((a-1)^(b-1)).bit_length()

와 ㅋㅋ

profile
0x68656C6C6F21

0개의 댓글