์๋ ํ์ธ์! ์ค๋์ ๋ฐฑ์ค์ 10819๋ฒ ๋ฌธ์ ์ธ “์ฐจ์ด๋ฅผ ์ต๋๋ก” ๋ฌธ์ ๋ฅผ ํจ๊ป ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์์ด์์ ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ์ ์ต๋๋ก ๋ง๋๋ ๋ฌธ์ ์ ๋๋ค.
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• ์ฃผ์ด์ง ์์ด์ ์ด์ฉํ์ฌ ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ์ ์ต๋๋ก ๋ง๋๋ ์์ด์ ์ฐพ์์ผ ํฉ๋๋ค.
• ์ฃผ์ด์ง๋ ์์ด์ ๊ธธ์ด N ์ 3 ์ด์ 8 ์ดํ์
๋๋ค.
2) ์
๋ ฅ
• ์ฒซ ์ค์ ์์ด์ ๊ธธ์ด N ์ด ์ฃผ์ด์ง๋๋ค.
• ๋ ๋ฒ์งธ ์ค์ ์์ด A ๊ฐ ์ฃผ์ด์ง๋๋ค.
3) ์ถ๋ ฅ
• ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ ์ค ์ต๋๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
๋ฌธ์ URL : https://www.acmicpc.net/problem/10819
2. ์ ๊ทผ๋ฒ
1) ์
๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์
๋ ฅ ์๋๋ฅผ ๋์
๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ N (์์ด์ ๊ธธ์ด)์ ์
๋ ฅ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ค์์ ์์ด A ๋ฅผ ์
๋ ฅ๋ฐ์ต๋๋ค.
2) ๋ฐฑํธ๋ํน์ ์ด์ฉํ ์์ด ์์ฑ
• ์์ด์ ์์ฑํ์ฌ ๊ฐ ์์ด์ ๋ํด ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
• ์ต๋ ํฉ์ ์ ์ฅํ๊ธฐ ์ํด ans ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
3) ์์ด์ ์ฐจ์ด ํฉ ๊ณ์ฐ
• ๊ฐ ์์ด์ ๋ํด ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ์ ๊ณ์ฐํ์ฌ ์ต๋ ๊ฐ์ ๊ฐฑ์ ํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ ๋ฐ๊ธฐ
N = int(input()) # ์์ด์ ๊ธธ์ด
A = list(map(int, input().split())) # ์์ด
# ์ ์ญ ๋ณ์ ์ด๊ธฐํ
tmp = [] # ํ์ฌ ์์ด์ ์ ์ฅํ๋ ๋ฆฌ์คํธ
visit = [False] * N # ๊ฐ ์์์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๋ฆฌ์คํธ
ans = 0 # ์ต๋ ํฉ์ ์ ์ฅํ๋ ๋ณ์
# ๋ฐฑํธ๋ํน ์ฌ๊ท ํจ์ ์ ์
def recur(idx):
global tmp
global ans
global visit
# ๋ชจ๋ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์์ด์ ๋ง๋ ๊ฒฝ์ฐ
if idx == N:
# ํ์ฌ ์์ด์์ ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ ๊ณ์ฐ
total = sum(abs(tmp[i] - tmp[i+1]) for i in range(N-1))
# ์ต๋ ํฉ ๊ฐฑ์
ans = max(total, ans)
return
# ์์ด์ ๋ชจ๋ ์์๋ฅผ ํ๋์ฉ ์๋
for i in range(N):
# ํด๋น ์์๋ฅผ ์์ง ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
if not visit[i]:
visit[i] = True # ํ์ฌ ์์ ์ฌ์ฉ ํ์
tmp.append(A[i]) # ํ์ฌ ์์๋ฅผ ์์ด์ ์ถ๊ฐ
recur(idx + 1) # ๋ค์ ์ธ๋ฑ์ค๋ก ์ฌ๊ท ํธ์ถ
visit[i] = False # ์์ ์ฌ์ฉ ํด์
tmp.pop() # ์์ด์์ ํ์ฌ ์์ ์ ๊ฑฐ
# ๋ฐฑํธ๋ํน ํจ์ ํธ์ถ
recur(0)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
์์ด ์์ฑ
• visit ๋ฆฌ์คํธ๋ ๊ฐ ์์์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์๋ฅผ ๋ค์ด, N = 3 , A = [1, 2, 3] ์ด๋ผ๋ฉด, visit = [False, False, False]๊ฐ ๋ฉ๋๋ค.
• tmp ๋ฆฌ์คํธ๋ ํ์ฌ ์์ฑ๋ ์์ด์ ์ ์ฅํฉ๋๋ค.
๋ฐฑํธ๋ํน ํจ์
์์ด ์์ฑ ๊ณผ์
• ๋ชจ๋ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์์ด์ ๋ง๋ ๊ฒฝ์ฐ, ์ธ์ ํ ์์์ ์ฐจ์ ์ ๋๊ฐ์ ํฉ์ ๊ณ์ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ด์ด [1, 3, 2]๋ผ๋ฉด:
• |1-3| = 2
• |3-2| = 1
• ๋ฐ๋ผ์ ํฉ์ 2 + 1 = 3 ์ด ๋ฉ๋๋ค.
• ์ด ๊ฐ์ ans ๋ณ์์ ๋น๊ตํ์ฌ ์ต๋ ๊ฐ์ ๊ฐฑ์ ํฉ๋๋ค.
ํจ์ ๋์ ์์
1) ์ด๊ธฐ ์ํ
• tmp = [], visit = [False, False, False]
2) ์ฒซ ๋ฒ์งธ ์์ ์ ํ
• visit[0] = True, tmp = [1]
• ์ฌ๊ท ํธ์ถ: recur(1)
3) ๋ ๋ฒ์งธ ์์ ์ ํ
• visit[1] = True, tmp = [1, 2]
• ์ฌ๊ท ํธ์ถ: recur(2)
4) ์ธ ๋ฒ์งธ ์์ ์ ํ
• visit[2] = True, tmp = [1, 2, 3]
• ๋ชจ๋ ์์ ์ฌ์ฉ, ์ฐจ์ ํฉ ๊ณ์ฐ
• |1-2| + |2-3| = 1 + 1 = 2
• ans ๊ฐฑ์ (ํ์ฌ 2)
5) ๋ฐฑํธ๋ํน ์งํ
• visit[2] = False, tmp = [1, 2]
• visit[1] = False, tmp = [1]
• visit[0] = False, tmp = []
6) ๋ค๋ฅธ ์์ด ์์ฑ ๋ฐ๋ณต
• ์๋ก์ด ์์ด [1, 3, 2], [2, 1, 3], ๋ฑ๋ฑ์ ์์ฑํ์ฌ ์ต๋๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
• ์๋ฅผ ๋ค์ด, [1, 3, 2]์ธ ๊ฒฝ์ฐ:
• |1-3| + |3-2| = 2 + 1 = 3
• ans ๊ฐฑ์ (ํ์ฌ 3)
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 14267[ํ์ฌ ๋ฌธํ 1] (0) | 2024.07.07 |
---|---|
BOJ(๋ฐฑ์ค) 1068[ํธ๋ฆฌ] (0) | 2024.07.07 |
BOJ(๋ฐฑ์ค) 14465[์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ 5] (0) | 2024.07.04 |
BOJ(๋ฐฑ์ค) 11728[๋ฐฐ์ด ํฉ์น๊ธฐ] (0) | 2024.07.01 |
BOJ(๋ฐฑ์ค) 1946[์ ์ ์ฌ์] (0) | 2024.06.28 |