본문 바로가기

알고리즘

[프로그래머스 LV 2] 예상 대진표(파이썬)

https://school.programmers.co.kr/learn/courses/30/lessons/12985

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 문제의 핵심은 현재의 번호를 대진하는 track으로 어떻게 변환하고 그것을 활용하는가 입니다.

저는 이 문제를 dfs를 통해 접근하였습니다.

1. n = 8 , A = 4, B = 7

초기 상태입니다 위의 동그라미를 track으로 칭하겠습니다.

track = > 다음 단계의 대전구도

그럼 이 구도를 재귀적으로 반복(DFS)하면 되지않을까? 생각하였습니다.

def solution(n,a,b):
    # dfs?
    def dfs(a,b):
        # 짝수일때와 홀수일때의 track이 다르다.
        print(a,b)
        if a % 2 == 0:
            a_track = a/2
        else:
            a_track = (a+1) / 2
        if b % 2 == 0 :
            b_track = b / 2
        else:
            b_track = (b + 1) / 2
        if a_track == b_track:
            return 1
        else:
            return 1 + dfs(a_track, b_track)
            
    cnt = dfs(a,b)
    return cnt

짝수일때와 홀수일때의 track의 구도가 다릅니다.

그리고 a_track과 b_track이 서로 만나는 stage를 return 해주었습니다.

'알고리즘' 카테고리의 다른 글

[프로그래머스 LV2] 더 맵게 - 파이썬  (0) 2023.12.20
[프로그래머스 LV2] 전화번호 목록 - 파이썬  (0) 2023.12.20
백준-1158 (파이썬)  (0) 2023.10.02
백준-10866  (1) 2023.10.02
이진 탐색 - 구현  (0) 2023.09.25