ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 1904 01타일 with Python
    PS 2022. 2. 2. 00:43
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 1904 01타일

    πŸ’‘ 쑰건

    1. 각각의 타일듀은 0 λ˜λŠ” 1이 μ“°μ—¬ μžˆλŠ” λ‚±μž₯의 타일듀이닀.

    2. 동주가 μ§€μ›μ΄μ˜ 곡뢀λ₯Ό λ°©ν•΄ν•˜κΈ° μœ„ν•΄ 0이 쓰여진 λ‚±μž₯의 타일듀을 λΆ™μ—¬μ„œ ν•œ 쌍으둜 이루어진 00 타일듀을 λ§Œλ“€μ—ˆλ‹€.
      κ²°κ΅­ ν˜„μž¬ 1 ν•˜λ‚˜λ§ŒμœΌλ‘œ 이루어진 타일 λ˜λŠ” 0타일을 두 개 뢙인 ν•œ 쌍의 00νƒ€μΌλ“€λ§Œμ΄ λ‚¨κ²Œ λ˜μ—ˆλ‹€.

    3. N=1일 λ•Œ 1만 λ§Œλ“€ 수 있고, N=2일 λ•ŒλŠ” 00, 11을 λ§Œλ“€ 수 μžˆλ‹€. (01, 10은 λ§Œλ“€ 수 μ—†κ²Œ λ˜μ—ˆλ‹€.)
      λ˜ν•œ N=4일 λ•ŒλŠ” 0011, 0000, 1001, 1100, 1111 λ“± 총 5개의 2진 μˆ˜μ—΄μ„ λ§Œλ“€ 수 μžˆλ‹€.

    4. N이 주어진닀.
      (1 ≀ N ≀ 1,000,000)

    5. 지원이가 λ§Œλ“€ 수 μžˆλŠ” 길이가 N인 λͺ¨λ“  2진 μˆ˜μ—΄μ˜ 개수λ₯Ό 15746으둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό 좜λ ₯ν•œλ‹€.

    6. DP μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    n = int(stdin.readline())
    dp = [0 for _ in range(1000001)]
    dp[1], dp[2], dp[3], dp[4] = 1, 2, 3, 5
    
    for i in range(5, n + 1):
        num = ((dp[i-1] + dp[i-2]) % 15746)
        dp[i] = num
    
    print(dp[n])

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

    예제

    4

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

    5

    ⌨️ 문제 풀이

    1. N이 100λ§ŒκΉŒμ§€ λ“€μ–΄μ˜¬ 수 μžˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ, DP 리슀트의 ν¬κΈ°λŠ” 1000001 이 λ˜μ–΄μ•Όν•œλ‹€.

    2. N의 값이 3일 λ•ŒκΉŒμ§€ 직접 계산을 해보면 dp[3] κΉŒμ§€μ˜ 값은 μ•„λž˜μ™€ κ°™λ‹€.

      • 1, 2, 3
    3. dp[i] = (dp[i-1] + dp[i-2]) % 15746
      μœ„μ™€ 같은 점화식을 λ§Œλ“€ 수 μžˆλ‹€.

    πŸ’Ύ λŠλ‚€μ 

    1. λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ°μ„ μ΄μš©ν•΄ 문제λ₯Ό 풀이할 수 μžˆλŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
    2. λ‹€λ₯Έ DP λ¬Έμ œμ™€ λ‹€λ₯΄κ²Œ μΉœμ ˆν•˜κ³ , 쉽고 μž¬λ―Έμžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.