ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 1755 μˆ«μžλ†€μ΄ with Python
    PS 2022. 3. 6. 00:49
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 1755 μˆ«μžλ†€μ΄

    πŸ’‘ 쑰건

    1. 79λ₯Ό μ˜μ–΄λ‘œ 읽되 숫자 λ‹¨μœ„λ‘œ ν•˜λ‚˜μ”© μ½λŠ”λ‹€λ©΄ "seven nine"이 λœλ‹€. 80은 λ§ˆμ°¬κ°€μ§€λ‘œ "eight zero"라고 μ½λŠ”λ‹€.
    2. 79λŠ” 80보닀 μž‘μ§€λ§Œ, μ˜μ–΄λ‘œ 숫자 ν•˜λ‚˜μ”© μ½λŠ”λ‹€λ©΄ "eight zero"κ°€ "seven nine"보닀 μ‚¬μ „μˆœμœΌλ‘œ λ¨Όμ € μ˜¨λ‹€.
    3. λ¬Έμ œλŠ” μ •μˆ˜ M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N μ΄ν•˜μ˜ μ •μˆ˜λ₯Ό 숫자 ν•˜λ‚˜μ”© μ½μ—ˆμ„ λ•Œλ₯Ό κΈ°μ€€μœΌλ‘œ μ‚¬μ „μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬ 좜λ ₯ν•˜λŠ” 것.
    4. M 이상 N μ΄ν•˜μ˜ μ •μˆ˜λ₯Ό 문제 쑰건에 맞게 μ •λ ¬ν•˜μ—¬ ν•œ 쀄에 10κ°œμ”© 좜λ ₯ν•œλ‹€.
    5. μ •λ ¬ μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    n = int(stdin.readline())
    arr = []
    num = 0
    i = 1
    
    while n > num:
        num += (i * (i + 1)) // 2
        arr.append(num)
        i += 1
    
    dp = [int(1e9) for i in range(n + 1)]
    for i in range(1, n + 1):
        for num in arr:
            if num == i:
                dp[i] = 1
                break
            elif num > i:
                break
            dp[i] = min(dp[i], 1 + dp[i - num])
    
    print(dp[n])

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

    예제

    8 28

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

    8 9 18 15 14 19 11 17 16 13
    12 10 28 25 24 21 27 26 23 22
    20

    ⌨️ 문제 풀이

    1. dict ν˜• λ³€μˆ˜ d 에 각 μˆ«μžλ§ˆλ‹€μ˜ μ˜μ–΄ λ¬Έμžμ—΄μ„ μ €μž₯ν•œλ‹€.
    2. nλΆ€ν„° m + 1 κΉŒμ§€ 순회(i)ν•˜λ©΄μ„œ iλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œ 길이만큼 또 순회(j)ν•œλ‹€.
    3. s 배열에 data[j]λ₯Ό μ˜μ–΄ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ ν›„ λ„£μ–΄μ€€λ‹€.
    4. j μˆœνšŒκ°€ λλ‚˜λ©΄ s λ¦¬μŠ€νŠΈμ— iλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•œ 값을 μΆ”κ°€ν•΄μ€€λ‹€.
    5. κ·Έ ν›„, temp 배열에 sλ₯Ό νŠœν”Œλ‘œ λ§Œλ“€μ–΄ μΆ”κ°€ν•œλ‹€.
    6. tempλ₯Ό μ •λ ¬ν•˜κ³ , μ •λ ¬λœ μˆ«μžκ°’μ„ 10κ°œμ”© 좜λ ₯ν•œλ‹€.

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

    1. 그닀지 μ–΄λ €μš΄ λ¬Έμ œκ°€ μ•„λ‹ˆμ—ˆλŠ”λ°, λ³΅μž‘ν•˜κ²Œ μƒκ°ν•΄μ„œ νž˜λ“€μ—ˆλ˜ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.