โ๋ฌธ์
https://www.acmicpc.net/problem/14500
๋ฉ๋ชจ๋ฆฌ: 114816 KB, ์๊ฐ: 152 ms
๊ตฌํ, ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ
ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ ๋ถ์ธ ๋ํ์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ์ ์๋ก ๊ฒน์น๋ฉด ์ ๋๋ค.
- ๋ํ์ ๋ชจ๋ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค.
- ์ ์ฌ๊ฐํ์ ๋ณ๋ผ๋ฆฌ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํ๋ค. ์ฆ, ๊ผญ์ง์ ๊ณผ ๊ผญ์ง์ ๋ง ๋ง๋ฟ์ ์์ผ๋ฉด ์ ๋๋ค.
์ ์ฌ๊ฐํ 4๊ฐ๋ฅผ ์ด์ด ๋ถ์ธ ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํ ํธ๋ก๋ฏธ๋ ธ๋ผ๊ณ ํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ 5๊ฐ์ง๊ฐ ์๋ค.
์๋ฆ์ด๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ข ์ด ์์ ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ๋์ผ๋ ค๊ณ ํ๋ค. ์ข ์ด๋ 1×1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์นธ์๋ ์ ์๊ฐ ํ๋ ์ฐ์ฌ ์๋ค.
ํ ํธ๋ก๋ฏธ๋ ธ ํ๋๋ฅผ ์ ์ ํ ๋์์ ํ ํธ๋ก๋ฏธ๋ ธ๊ฐ ๋์ธ ์นธ์ ์ฐ์ฌ ์๋ ์๋ค์ ํฉ์ ์ต๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
ํ ํธ๋ก๋ฏธ๋ ธ๋ ๋ฐ๋์ ํ ์ ์ฌ๊ฐํ์ด ์ ํํ ํ๋์ ์นธ์ ํฌํจํ๋๋ก ๋์์ผ ํ๋ฉฐ, ํ์ ์ด๋ ๋์นญ์ ์์ผ๋ ๋๋ค.
โ๐ปํ์ด
DFS์ ๋ฐฑํธ๋ํน์ผ๋ก ์ ๊ทผํ๋ฉด ๋๋ค. ๊น์ด ์ฐ์ ํ์์ ํ๋ฉด ใ ๋ชจ์์ ์ ์ธํ ๋ชจ๋ ๋ชจ์์ ๊ตฌํ ์ ์๋ค.
ใ ๋ชจ์์ ๋ง๋๋ ค๋ฉด ํ ์ขํ์์ ์ ์์ผ๋ก ํ์ํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ๋ณดํต DFS๋ฅผ ํ ๋ ์ด์ ์ขํ๋ฅผ ๊ธฐ๋กํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ขํ๋ฅผ ๊ธฐ๋กํ์ฌ ์ด๋ฏธ ์ง๋์จ ์ขํ๋๋ผ๋ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์ํ์ฌ ใ ๋ชจ์์ ๋ง๋ค๋ฉด ๋๋ค.
https://jominseoo.tistory.com/96
[์ผ์ฑ SW ์ญ๋ํ ์คํธ ๊ธฐ์ถ] ๋ฐฑ์ค 14500๋ฒ ํ ํธ๋ก๋ฏธ๋ ธ(Python)
๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/14500] ๋์ด๋ : ๊ณจ๋ 4 14500๋ฒ: ํ ํธ๋ก๋ฏธ๋ ธ ํด๋ฆฌ์ค๋ฏธ๋ ธ๋ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ ๋ถ์ธ ๋ํ์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค. ์ ์ฌ๊ฐ
jominseoo.tistory.com
๊ฐ์ง์น๊ธฐ์ ใ ๋ชจ์์ ๋ํด์๋ ์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํด์ ํ์๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
visited = [[0 for _ in range(M)] for _ in range(N)]
mx = max(map(max, board))
def backtracking(pos, cnt, res):
global ans
if res + (4-cnt) * mx <= ans:
return
if cnt == 4:
ans = max(res, ans)
return
for y, x in pos:
for dy, dx in ((-1, 0), (1, 0), (0, -1), (0, 1)):
ny, nx = y + dy, x + dx
if 0 <= ny < N and 0 <= nx < M and not visited[ny][nx]:
visited[ny][nx] = 1
backtracking(pos + [(ny, nx)], cnt + 1, res + board[ny][nx])
visited[ny][nx] = 0
ans = 0
for y in range(N):
for x in range(M):
visited[y][x] = 1
backtracking([(y, x)], 1, board[y][x])
print(ans)
๐ํ๊ธฐ
์ฒ์์ DFS๋ก ํ์์ง๋ง ใ ๋ชจ์์ ํด๊ฒฐํ๋ ๊ฒ์์ ๋ง์ ์๊ฐ์ ์์ํ์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ DFS์ ๋ํ ํธํ์ ์ธ ์๊ฐ์ ๊นฐ ์ ์์๋ค๊ณ ์๊ฐํ๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2630. ์์ข ์ด ๋ง๋ค๊ธฐ/Python - Silver2 (0) | 2025.08.10 |
---|---|
[๋ฐฑ์ค] 11404. ํ๋ก์ด๋/Python - Gold4 (0) | 2025.08.07 |
[๋ฐฑ์ค] 14502. ์ฐ๊ตฌ์/Python - Gold4 (0) | 2025.08.03 |
[๋ฐฑ์ค] 14499. ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ/Python - Gold4 (4) | 2025.08.02 |
[๋ฐฑ์ค] 3190. ๋ฑ/Python - Gold4 (3) | 2025.07.30 |