λ°±μ€€ 1174 μ€„μ–΄λ“œλŠ” 수 파이썬

2022. 12. 26. 05:46γ†πŸ”± Algorithm/Back tracking

 

 

1174번: μ€„μ–΄λ“œλŠ” 수

음이 μ•„λ‹Œ μ •μˆ˜λ₯Ό μ‹­μ§„λ²•μœΌλ‘œ ν‘œκΈ°ν–ˆμ„ λ•Œ, μ™Όμͺ½μ—μ„œλΆ€ν„° μžλ¦¬μˆ˜κ°€ κ°μ†Œν•  λ•Œ, κ·Έ 수λ₯Ό μ€„μ–΄λ“œλŠ” 수라고 ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 321와 950은 μ€„μ–΄λ“œλŠ” 수이고, 322와 958은 μ•„λ‹ˆλ‹€. N번째둜 μž‘μ€ μ€„μ–΄λ“œλŠ”

www.acmicpc.net

 

μ‘°ν•© 풀이

from itertools import combinations


N = int(input())
result = set()

for i in range(1, 11):
    for com in combinations(range(0, 10), i):
        com = sorted(com, reverse=True)
        result.add(int(''.join(map(str, com))))
result = sorted(result)

try:
    print(result[N - 1])
except IndexError:
    print(-1)

 

 

λ°±νŠΈλž˜ν‚Ή 풀이

N = int(input())
result = set()
number = []


def dfs():
    if number:
        result.add(int(''.join(map(str, number))))
    for i in range(10):
        if not number or number[-1] > i:  # μ™Όμͺ½ μˆ˜κ°€ 였λ₯Έμͺ½ 수 보닀 ν¬λ―€λ‘œ κ°μ†Œ μΌ€μ΄μŠ€μ— ν•΄λ‹Ή
            number.append(i)
            dfs()
            number.pop()


dfs()
result = sorted(result)
print(result[N - 1] if len(result) >= N else -1)

'πŸ”± Algorithm > Back tracking' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ°±μ€€ 1987 μ•ŒνŒŒλ²³ 파이썬  (0) 2022.07.08