ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 2096 λ‚΄λ €κ°€κΈ° with Python
    PS 2022. 3. 12. 02:29
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 2096 λ‚΄λ €κ°€κΈ°

    πŸ’‘ 쑰건

    1. N쀄에 0 이상 9 μ΄ν•˜μ˜ μˆ«μžκ°€ μ„Έ κ°œμ”© μ ν˜€ μžˆλ‹€.
      λ‚΄λ €κ°€κΈ° κ²Œμž„μ„ ν•˜κ³  μžˆλŠ”λ°, 이 κ²Œμž„μ€ 첫 μ€„μ—μ„œ μ‹œμž‘ν•΄μ„œ λ§ˆμ§€λ§‰ μ€„μ—μ„œ λλ‚˜κ²Œ λ˜λŠ” 놀이이닀.

    2. λ¨Όμ € μ²˜μŒμ— μ ν˜€ μžˆλŠ” μ„Έ 개의 숫자 μ€‘μ—μ„œ ν•˜λ‚˜λ₯Ό κ³¨λΌμ„œ μ‹œμž‘ν•˜κ²Œ λœλ‹€.
      그리고 λ‹€μŒ μ€„λ‘œ λ‚΄λ €κ°€λŠ”λ°, λ‹€μŒ μ€„λ‘œ λ‚΄λ €κ°ˆ λ•Œμ—λŠ” λ‹€μŒκ³Ό 같은 μ œμ•½ 쑰건이 μžˆλ‹€.
      λ°”λ‘œ μ•„λž˜μ˜ 수둜 λ„˜μ–΄κ°€κ±°λ‚˜, μ•„λ‹ˆλ©΄ λ°”λ‘œ μ•„λž˜μ˜ μˆ˜μ™€ λΆ™μ–΄ μžˆλŠ” 수둜만 이동할 수 μžˆλ‹€λŠ” 것이닀.

    3. μ΅œλŒ€ 점수, μ΅œμ†Œ 점수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 문제

    4. 첫째 쀄에 N(1 ≀ N ≀ 100,000)이 주어진닀. λ‹€μŒ N개의 μ€„μ—λŠ” μˆ«μžκ°€ μ„Έ κ°œμ”© 주어진닀.

    5. μˆ«μžλŠ” 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 μ€‘μ˜ ν•˜λ‚˜κ°€ λœλ‹€.
      첫째 쀄에 얻을 수 μžˆλŠ” μ΅œλŒ€ μ μˆ˜μ™€ μ΅œμ†Œ 점수λ₯Ό λ„μ–΄μ„œ 좜λ ₯ν•œλ‹€.

    6. λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    n = int(stdin.readline())
    
    x_dp = [0] * 3
    n_dp = [0] * 3
    
    x_temp = [0] * 3
    n_temp = [0] * 3
    
    for i in range(n):
        a, b, c = map(int, stdin.readline().split())
    
        for j in range(3):
            if j == 0:
                x_temp[j] = a + max(x_dp[j], x_dp[j + 1])
                n_temp[j] = a + min(n_dp[j], n_dp[j + 1])
    
            elif j == 1:
                x_temp[j] = b + max(x_dp[j - 1], x_dp[j], x_dp[j + 1])
                n_temp[j] = b + min(n_dp[j - 1], n_dp[j], n_dp[j + 1])
    
            elif j == 2:
                x_temp[j] = c + max(x_dp[j], x_dp[j - 1])
                n_temp[j] = c + min(n_dp[j], n_dp[j - 1])
    
        for j in range(3):
            x_dp[j] = x_temp[j]
            n_dp[j] = n_temp[j]
    
    print(max(x_dp), min(n_dp))

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

    예제

    3
    1 2 3
    4 5 6
    4 9 0

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

    18 6

    ⌨️ 문제 풀이

    1. μž…λ ₯받은 n만큼 μˆœνšŒν•œλ‹€.

    2. μ•„λž˜μΈ΅μœΌλ‘œ λ‚΄λ €κ°€λ©΄μ„œ ν•©μΉ  λ•Œ κ°€μž₯ 큰 κ°’κ³Ό μž‘μ€ 값을 x_temp, n_temp에 μ €μž₯ν•œλ‹€.

    3. dp에 x_temp, n_temp λ‚΄μš©μ„ μ €μž₯ν•œλ‹€.

    4. μ΅œλŒ“κ°‘κ³Ό μ΅œλŒ“κ°’μ„ λ”°λ‘œ μ €μž₯ν•  배열을 λ§Œλ“€κ³ , μœ„μΉ˜μ— 따라 선택할 수 μžˆλŠ” 값을 λ‹¬λ¦¬ν•˜μ—¬ μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” 것이 λͺ©μ μ΄λ‹€.

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

    1. λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° λ¬Έμ œλŠ” μ—­μ‹œ 점화식 λ•Œλ¬Έμ— 골치λ₯Ό 많이 μ©μ–΄ν•˜λŠ” 것 κ°™λ‹€.
    2. 생각보닀 λ¬Έμ œν’€μ΄λ₯Ό 보고 어렡지 μ•Šμ•˜λ˜ 문제인데 μ™œ ν—€λ§Έμ„κΉŒ ν•˜λŠ” 생각을 ν–ˆλ‹€.
    3. μ΄λŸ¬ν•œ μœ ν˜•μ„ λ‹€μ‹œ ν’€μ—ˆμ„ λ•Œ, 잘 ν’€ 수 있게 풀이λ₯Ό μ¨μ•Όκ² λ‹€λŠ” 생각을 ν–ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.