ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 14562. [Python]태권왕
    Python_알고리즘/Silver I 2025. 1. 2. 18:46

    1. 문제

     

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

     

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 128MB
    • 그래프 이론
    • 너비 우선 탐색

     

    3. 파이썬 코드

     

    import sys
    from collections import deque
    # BFS 통한 탐색
    def BFS(start,target):
        # 초기값으로 시간, 시작점, 목표점
        q = deque([(0,start,target)])
        while q:
            time, current, target = q.popleft()
            # 현재 점수가 목표점수와 같은 경우
            if current == target:
                # 시간 출력
                print(time)
                break
            # 목표점수 + 3 의 값보다 현재값의 2배한 값이 작거나 같은경우
            if target + 3 >= current*2:
                # 점수가 한번도 횟수가 안나온 경우
                if graph[current*2] == -1:
                    # queue 값에 현재 시간 +1, 현재점수 *2, 목표점수 +3 추가
                    q.append((time+1, current*2, target+3))
            # 만약 현재 점수 +1 한 값이 나오지 않은 점수인 경우
            if graph[current+1] == -1:
                # queue 에 현재 시간 +1, 현재 값 +1, 목표값 저장
                q.append((time+1, current+1, target))
    
    input = sys.stdin.readline
    
    T = int(input())
    
    for tc in range(T):
        graph = [-1] * 100001
        me, enemy = map(int,input().split())
        if me == enemy:
            print(0)
            continue
        BFS(me,enemy)

     

    4. 문제를 풀고난 후 생각

     

    • 숨바꼭질 문제와 비슷한 유형의 문제로 현재 점수를 바탕으로 목표 점수와 횟수를 체크하여 너비 우선탐색을 진행하여 목표점수에 도달했을 경우 걸린 횟수를 출력해주는 문제이다.
    • 점수의 - 값이 없기 떄문에 *2 를 한 값이 목표점수 +3 보다 큰 경우는 queue에 추가하지 않는 경우를 조건에 넣어주면 탐색이 오래걸리지 않는다.
    • 점수가 초기값이 100보다 작거나 같다고 나왔지만 실제 점수의 최대값은 정해져있지 않기 떄문에 넉넉하게 graph 값을 100001 로 초기값으로 잡아줘서 IndexError 를 방지했다.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 너비 우선 탐색(BFS)

    'Python_알고리즘 > Silver I' 카테고리의 다른 글

    2529. [Python]부등호  (0) 2025.02.06
    14888. [Python]연산자 끼워넣기  (0) 2024.07.31
    20922. [Python]겹치는 건 싫어  (0) 2024.07.15
    2531. [Python]회전 초밥  (0) 2024.06.30
    1105. [Python]팔  (0) 2024.06.20

    댓글

Designed by Tistory.