ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 14562 νƒœκΆŒμ™• with Python
    PS 2022. 5. 12. 01:26
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 14562 νƒœκΆŒμ™•

    πŸ’‘ 쑰건

    1. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 수 C(1 ≀ C ≀ 100)
      ν˜„μž¬ 점수 S와 Tκ°€ 곡백을 사이에 두고 주어진닀. (1 ≀ S < T ≀ 100)

    2. νƒœκ· μ΄κ°€ ν˜„μž¬ ν•  수 μžˆλŠ” 연속 λ°œμ°¨κΈ°λŠ” 두가지가 μžˆλ‹€.
      AλŠ” ν˜„μž¬ 점수만큼 점수λ₯Ό 얻을 수 μžˆλŠ” μ—„μ²­λ‚œ 연속 λ°œμ°¨κΈ°μ΄λ‹€. ν•˜μ§€λ§Œ μƒλŒ€ μ—­μ‹œ 3점을 λ“μ ν•˜λŠ” μœ„ν—˜μ΄ μžˆλ‹€.
      BλŠ” 1점을 μ–»λŠ” 연속 λ°œμ°¨κΈ°μ΄λ‹€.

    3. νƒœκ· μ΄μ˜ 점수 S와 μƒλŒ€μ˜ 점수 Tκ°€ μ£Όμ–΄μ§ˆ λ•Œ, S와 Tκ°€ κ°™μ•„μ§€λŠ” μ΅œμ†Œ 연속 발차기 횟수λ₯Ό κ΅¬ν•˜λŠ” 문제

    4. BFS(λ„ˆλΉ„μš°μ„ νƒμƒ‰) μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    from collections import deque
    
    
    def solve(s, t):
        q = deque()
        q.append((0, s, t))
    
        while q:
            time, s, t = q.popleft()
    
            if s == t:
                return time
    
            if (t + 3) >= s * 2:
                if use[s * 2] == -1:
                    q.append((time + 1, s * 2, t + 3))
    
            if use[s + 1] == -1:
                q.append((time + 1, s + 1, t))
    
    
    for _ in range(int(stdin.readline())):
        s, t = map(int, stdin.readline().split())
        use = [-1 for _ in range(100001)]
        print(solve(s, t))

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    6
    10 20
    2 7
    15 62
    10 37
    11 50
    34 59

    μ‹€ν–‰κ²°κ³Ό

    3
    3
    4
    4
    5
    25

    ⌨️ 문제 풀이

    1. BFS둜 점수λ₯Ό 얻을 수 μžˆλŠ” 점수λ₯Ό 큐에 μΆ”κ°€ν•œλ‹€.

    2. (time + 1, s * 2, t + 3)λŠ” λ‚΄κ°€ ν˜„μž¬ 점수만큼 점수λ₯Ό μ–»κ³ , μƒλŒ€λ°©μ—κ²Œ 점수λ₯Ό 3점 λ‚΄μ–΄μ£ΌλŠ” μƒνƒœ.

    3. (time + 1, s + 1, t) λŠ” λ‚΄κ°€ 1점만큼 점수λ₯Ό 얻을 수 μžˆλŠ” μƒνƒœ

    4. (ν˜„μž¬ λ‚˜μ˜ 점수 * 2)의 μƒνƒœλ₯Ό λ§Œλ“  적이 μ—†λ‹€λ©΄ (2)λ²ˆμ„,
      (ν˜„μž¬λ‚˜μ˜ 점수 + 1)의 μƒνƒœλ₯Ό λ§Œλ“ μ μ΄ μ—†λ‹€λ©΄ (3)번의 μƒνƒœλ₯Ό 큐에 λ„£μ–΄μ€€λ‹€.

    5. ν˜„μž¬ λ‚˜μ˜ μ μˆ˜μ™€ μƒλŒ€λ°©μ˜ μ μˆ˜κ°€ κ°™μœΌλ©΄ return

    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.