๋ฌธ์
๋ฐฑ์ค ๊ฐ์ํ๋ ์ https://www.acmicpc.net/problem/1038
์ฝ๋
n = int(input())
if n > 1022:
print(-1)
else:
num = []
ans = []
def check(i):
global num
if len(num) == 1:
return True
if num[-2] > i:
return True
def dfs(depth):
global num
for i in range(10):
num.append(i)
if check(i):
dfs(depth + 1)
ans.append(int(''.join(str(x) for x in num)))
num.pop()
dfs(0)
ans.sort()
print(ans[n])
ํ์ด
๊ฐ์ํ๋ ์๋ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 21, 30, 31, 32, 40, ... , 9876543210 ์์ผ๋ก ๋์ด๋๋ค.
if n > 1022:
print(-1)
9876543210์ 1022๋ฒ์งธ ์ซ์์ด๋ฏ๋ก, 1023๋ฒ์งธ๋ถํฐ๋ ๊ฐ์ํ๋ ์ซ์๊ฐ ์๋ค.
๋ฐ๋ผ์ n์ด 1022๋ฅผ ์ด๊ณผํ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
def check(i):
global num
if len(num) == 1:
return True
if num[-2] > i:
return True
ํด๋น ๋ฐฐ์ด์ด ๊ฐ์ํ๋ ์์ธ์ง ํ์ธํ๋ ํจ์๋ค.
ํ์๋ฆฌ ์๋ผ๋ฉด True๋ฅผ ๋ฐํํ๋ค.
์ถ๊ฐ๋ ์๊ฐ ๋ฐ๋ก ์์ ์(num[-2])๋ณด๋ค ์์ผ๋ฉด True๋ฅผ ๋ฐํํ๋ค.
def dfs(depth):
global num
for i in range(10):
num.append(i)
if check(i):
dfs(depth + 1)
ans.append(int(''.join(str(x) for x in num)))
num.pop()
๊ฐ์ํ๋ ์๋ฅผ num๋ฐฐ์ด์ ๋ด๊ณ , ์ด๋ฅผ ans ๋ฐฐ์ด์ ์ถ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ num์ pop()์ผ๋ก ๋น๋ฐฐ์ด์ ๋ง๋ ๋ค
๋ค์ ๊ฐ์ํ๋ ์๋ฅผ ๊ตฌํด์ num ๋ฐฐ์ด์ ๋ด๊ณ , ans ๋ฐฐ์ด์ ์ถ๊ฐํ๊ณ ๋ค์ num์ ๋น๋ฐฐ์ด๋ก ๋ง๋ค๊ณ ...
์ด ์์ ์ ์ต๋ ๊ฐ์ํ๋ ์ 9876543210 ๊น์ง ๋ฐ๋ณตํ๋ค.
dfs(0)
ans.sort()
#์ถ๋ ฅ
print(ans[n])
dfs(0)๋ฅผ ์คํํ์ฌ ์์ ํจ์๋ฅผ ์คํํ๊ณ ,
N๋ฒ์งธ ๊ฐ์ํ๋ ์๋ฅผ ์์์ผํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ํ๋ ์ซ์๋ค์ด ๋ด๊ธด ans๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
์ด๋ฌ๋ฉด ans๋ฐฐ์ด์๋ 0๋ถํฐ 9876543210 ๊น์ง ๊ฐ์ํ๋ ์๋ง ๋ด๊ธด ์ค๋ฆ์ฐจ์ ๋ฐฐ์ด์ด ๋ ๊ฒ์ด๋ค.
์๋กญ๊ฒ ๋ฐฐ์ด์ / ๋๋์
- ์ฒ์ ๋ฌธ์ ์ ๊ทผํ ๋ 0 ~9876543210 ๋ชจ๋ ํ์ํ๋ฉฐ ๊ฐ์ํ๋ ์๋ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ํ๋์ฉ ๋๋ฆฌ๋ค๊ฐ, ์ธ๋ฑ์ค๊ฐ n๊ณผ ๊ฐ์์ง๋ฉด ํ์ํ ํด๋น ์๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ํ๋๋ฐ maximum recursion depth ์๋ฌ๊ฐ ๊ฑธ๋ ค ํ๊ธฐ ์ด๋ ค์ ๋ค.
- ๋๋ก๋ ์ซ์๋ฅผ ์ ์ํ์ ๋์ด ๋ฌธ์ํ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๊ด์ ๋ ํ์ํ ๊ฒ ๊ฐ๋ค.
๋ ๋์ ์๊ฒฌ์ด๋ ๊ถ๊ธํ์ ๊ฒ ์๋ค๋ฉด ํธํ๊ฒ ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ํธ ๋ง๋ค๊ธฐ (0) | 2024.06.17 |
---|---|
[๋ฐฑ์ค] ๋ฆฌ๋ชจ์ปจ (0) | 2024.06.16 |
[๋ฐฑ์ค] ์ซ์์นด๋2 (0) | 2024.06.14 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ๊ตญ์ฌ์ฌ (0) | 2024.06.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (0) | 2024.05.30 |