[Python - ๋ฐฑ์ค 2529] ๋ถ๋ฑํธ
๋ฌธ์ ์ค๋ช
๋ ์ข ๋ฅ์ ๋ถ๋ฑํธ ๊ธฐํธ ‘<’์ ‘>’๊ฐ k๊ฐ ๋์ด๋ ์์์ด A๊ฐ ์๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ถ๋ฑํธ ๊ธฐํธ ์๋ค์ ์๋ก ๋ค๋ฅธ ํ ์๋ฆฟ์ ์ซ์๋ฅผ ๋ฃ์ด์ ๋ชจ๋ ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑ์ํค๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ ์๋ ๋ถ๋ฑํธ ์์์ด A๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํ์.
A => < < < > < < > < >
๋ถ๋ฑํธ ๊ธฐํธ ์๋ค์ ๋ฃ์ ์ ์๋ ์ซ์๋ 0๋ถํฐ 9๊น์ง์ ์ ์์ด๋ฉฐ ์ ํ๋ ์ซ์๋ ๋ชจ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์๋๋ ๋ถ๋ฑํธ ์์์ด A๋ฅผ ๋ง์กฑ์ํค๋ ํ ์์ด๋ค.
3 < 4 < 5 < 6 > 1 < 2 < 8 > 7 < 9 > 0
์ด ์ํฉ์์ ๋ถ๋ฑํธ ๊ธฐํธ๋ฅผ ์ ๊ฑฐํ ๋ค, ์ซ์๋ฅผ ๋ชจ๋ ๋ถ์ด๋ฉด ํ๋์ ์๋ฅผ ๋ง๋ค ์ ์๋๋ฐ ์ด ์๋ฅผ ์ฃผ์ด์ง ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑ์ํค๋ ์ ์๋ผ๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฃผ์ด์ง ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ ์ ์๋ ํ๋ ์ด์ ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด 3456128790 ๋ฟ๋ง ์๋๋ผ 5689023174๋ ์๋์ ๊ฐ์ด ๋ถ๋ฑํธ ๊ด๊ณ A๋ฅผ ๋ง์กฑ์ํจ๋ค.
5 < 6 < 8 < 9 > 0 < 2 < 3 > 1 < 7 > 4
์ฌ๋ฌ๋ถ์ ์ ์๋ k๊ฐ์ ๋ถ๋ฑํธ ์์๋ฅผ ๋ง์กฑํ๋ (k+1)์๋ฆฌ์ ์ ์ ์ค์์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ฐพ์์ผ ํ๋ค. ์์ ์ค๋ช ํ ๋๋ก ๊ฐ ๋ถ๋ฑํธ์ ์๋ค์ ๋ค์ด๊ฐ๋ ์ซ์๋ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }์ค์์ ์ ํํด์ผ ํ๋ฉฐ ์ ํ๋ ์ซ์๋ ๋ชจ๋ ๋ฌ๋ผ์ผ ํ๋ค.
์ ๋ ฅํ์
์ฒซ ์ค์ ๋ถ๋ฑํธ ๋ฌธ์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ k๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค์๋ k๊ฐ์ ๋ถ๋ฑํธ ๊ธฐํธ๊ฐ ํ๋์ ๊ณต๋ฐฑ์ ๋๊ณ ํ ์ค์ ๋ชจ๋ ์ ์๋๋ค. k์ ๋ฒ์๋ 2 ≤ k ≤ 9 ์ด๋ค.
์ถ๋ ฅํ์
์ฌ๋ฌ๋ถ์ ์ ์๋ ๋ถ๋ฑํธ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ k+1 ์๋ฆฌ์ ์ต๋, ์ต์ ์ ์๋ฅผ ์ฒซ์งธ ์ค๊ณผ ๋์งธ ์ค์ ๊ฐ๊ฐ ์ถ๋ ฅํด์ผ ํ๋ค. ๋จ ์๋ ์(1)๊ณผ ๊ฐ์ด ์ฒซ ์๋ฆฌ๊ฐ 0์ธ ๊ฒฝ์ฐ๋ ์ ์์ ํฌํจ๋์ด์ผ ํ๋ค. ๋ชจ๋ ์ ๋ ฅ์ ๋ต์ ํญ์ ์กด์ฌํ๋ฉฐ ์ถ๋ ฅ ์ ์๋ ํ๋์ ๋ฌธ์์ด์ด ๋๋๋ก ํด์ผ ํ๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
๋ถ๋ฑํธ ๊ฐฏ์๋ฅผ n๊ฐ๋ผ๊ณ ํ ๋, 0~9 ์์ n+1๋งํผ ์ซ์๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ ์๋ค. visited๋ฅผ ์ด์ฉํ์ฌ '000'๊ฐ์ ์ค๋ณต์ ํผํ๊ณ , possible ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ถ๋ฑํธ๊ฐ ์ณ์ ๋๋ง ๋ค์ backtracking์ ์คํํ๋๋ก ๊ตฌํํ๋ค. ์ฒ์์๋ ์์ ๋ฆฌ์คํธ์ ์ ํ๋ ์ซ์๋ฅผ ๋ฃ์ ๋ค์์ ๋ถ๋ฑํธ๋ฅผ ํ๋ณํ์ฌ min๊ฐ๊ณผ max๊ฐ์ ๋ฃ์ด์ฃผ๋ ์์ผ๋ก ๊ตฌํํ๋๋ฐ, ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ํ 021๊ฐ์ ๊ฒฝ์ฐ๋ 21์ด์๋๋ผ 021๋ก ์ถ๋ ฅํด์ค์ผํ๋ฏ๋ก ์ ํ๋ ๊ฐ๋ค์ int๋ก ํ๋๊ฒ๋ณด๋ค string์ผ๋ก ๋ฐ๋ก ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
+) min๊ฐ๊ณผ max๊ฐ์ ๊ตฌํ ๋๋ ์ด์งํผ ๋ธ๋ฃจํธํฌ์ค๋ก ์์ฐจ์ ์ผ๋ก ์กฐํฉ์ ๊ตฌํ๊ธฐ๋๋ฌธ์ min_value๊ฐ์ ๋งจ์ฒ์ ํต๊ณผํ ๊ฐ์ผ๋ก, max_value๋ ๊ณ์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด์ ๊ตฌํ๋ฉด ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค : )
def possible(item1, item2, symbol):
if symbol == '<':
return item1 < item2
if symbol == '>':
return item1 > item2
def backtracking(idx, string):
global min_value
global visited
global max_value
if idx == n + 1:
if not len(min_value):
min_value = string
else:
max_value = string
return
for i in range(10):
if visited[i]:
continue
if idx == 0 or possible(string[-1], str(i), stack[idx - 1]):
visited[i] = True
backtracking(idx + 1, string + str(i))
visited[i] = False
if __name__ == '__main__':
n = int(input())
stack = list(input().split())
max_value = ''
min_value = ''
visited = [False] * 10
backtracking(0, '')
print(max_value)
print(min_value)