ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 1038 κ°μ†Œν•˜λŠ” 수 with Python
    PS 2022. 3. 23. 17:16
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 1038 κ°μ†Œν•˜λŠ” 수

    πŸ’‘ 쑰건

    1. 음이 μ•„λ‹Œ μ •μˆ˜ X의 μžλ¦Ώμˆ˜κ°€ κ°€μž₯ 큰 μžλ¦Ώμˆ˜λΆ€ν„° μž‘μ€ μžλ¦Ώμˆ˜κΉŒμ§€ κ°μ†Œν•œλ‹€λ©΄, κ·Έ 수λ₯Ό κ°μ†Œν•˜λŠ” 수라고 ν•œλ‹€.

    2. N번째 κ°μ†Œν•˜λŠ” 수λ₯Ό 좜λ ₯ν•˜λŠ” 문제.

    3. 0은 0번째 κ°μ†Œν•˜λŠ” 수이고, 1은 1번째 κ°μ†Œν•˜λŠ” μˆ˜μ΄λ‹€. λ§Œμ•½ N번째 κ°μ†Œν•˜λŠ” μˆ˜κ°€ μ—†λ‹€λ©΄ -1을 좜λ ₯ν•œλ‹€.

    4. N은 1,000,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ λ˜λŠ” 0이닀.

    5. λ°±νŠΈλž˜ν‚Ή, 브루트포슀 μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    dp = [x for x in range(10)]
    
    
    def solve(cnt, s, num):
        if cnt == len(s):
            dp.append(int(s))
            return
    
        for i in range(num, -1, -1):
            if not s:
                solve(cnt, s + str(i), num - 1)
            else:
                if int(s[-1]) > i:
                    solve(cnt, s + str(i), i - 1)
    
    
    for i in range(2, 11):
        solve(i, '', 9)
    
    dp.sort()
    n = int(stdin.readline())
    if len(dp) - 1 < n:
        print(-1)
    else:
        print(dp[n])

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

    예제

    18

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

    42

    ⌨️ 문제 풀이

    1. μ€„μ–΄λ“œλŠ” 수λ₯Ό κ΅¬ν•΄μ„œ dp λ¦¬μŠ€νŠΈμ— 이어뢙여쀀닀.

    2. 0μ—μ„œ 9κΉŒμ§€λŠ” 미리 dp 생성 ν•  λ•Œ λ„£μ–΄λ‘” ν›„, μž¬κ·€ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ μ€„μ–΄λ“œλŠ” 수λ₯Ό ꡬ해 λ„£μ–΄μ€€λ‹€.

    3. dp 리슀트λ₯Ό μ •λ ¬ν•΄μ€€ λ’€, n이 리슀트의 λ²”μœ„λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ -1을 좜λ ₯ν•΄μ€€λ‹€.

    4. μ΄ˆκ³Όν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ dp[n] 을 좜λ ₯ν•œλ‹€.

    5. 숫자λ₯Ό μˆœνšŒν•˜λ©΄μ„œ ν•˜λŠ” 것이 μ•„λ‹Œ, 문자λ₯Ό μ΄μ–΄λΆ™μ΄λ©΄μ„œ μ€„μ–΄λ“œλŠ” 수λ₯Ό λ§Œλ“€λ©΄μ„œ κ΅¬ν•˜λ©΄ μ‰½κ²Œ ꡬ할 수 μžˆλ‹€.

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

    1. 쑰금 헀맬뻔 ν–ˆμ§€λ§Œ λ°”λ‘œ 정닡을 맞좜 수 μžˆλŠ”, 티어에 λΉ„ν•΄ λ³„λ‘œ 어렡지 μ•Šμ€ λ¬Έμ œμ˜€λ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.