https://softeer.ai/practice/info.do?idx=1&eid=2050
Softeer
์ฐ์ต๋ฌธ์ ๋ฅผ ๋ด์ Set์ ์ ํํด์ฃผ์ธ์. ์ทจ์ ํ์ธ
softeer.ai
๋ฌธ์
Sam์ ํ์ฅ๋์ผ๋ก๋ถํฐ ์ฐจ๋์ด ์ด๋ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค์ ์๋ฅผ ์ฐพ์ผ๋ผ๋ ์ ๋ฌด ์ง์๋ฅผ ๋ฐ์์ต๋๋ค. ์ด๋์ ์ซ์ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ n x n ํฌ๊ธฐ์ ๊ฒฉ์ ์์์ ์ผ์ด๋ฉ๋๋ค. ์ซ์ 0์ ๋น ์นธ์ ์๋ฏธํ๋ฉฐ, ์ซ์ 1์ ํด๋น ์นธ์ด ๋ฒฝ์ผ๋ก ๋งํ ์์์ ์๋ฏธํฉ๋๋ค. ์๋๋ n์ด 3์ธ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
0 0 0
0 0 0
0 0 1
์ฐจ๋์ n x n ๊ฒฉ์ ๋ด์์ m๊ฐ์ ์ง์ ์ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋ ์ด๋์ ํญ์ ์ํ์ข์ฐ ์ค ์ธ์ ํ ์นธ์ผ๋ก๋ง ์ด๋ํ๋ ๋ฒฝ์ ์ง๋๊ฐ ์ ์์ผ๋ฉฐ, ํ ๋ฒ ์ง๋ฌ๋ ์ง์ ์ ๋ค์๋ ๋ฐฉ๋ฌธํด์๋ ์ ๋ฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด ํ์์ ์ฐจ๋์ด ์ด๋ ๊ฐ๋ฅํ ์๋ก ๋ค๋ฅธ ๊ฐ์ง ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์ธ์.
๋ฐฉ๋ฌธํด์ผ ํ๋ ์ง์ ์ ์ฒซ ์ง์ ์ด ์ถ๋ฐ์ ์ด๋ฉฐ, ๋ง์ง๋ง ์ง์ ์ด ๋์ฐฉ์ ์์ ์ ์ํฉ๋๋ค.
์์ ์์์ m = 3, ๋ฐฉ๋ฌธํด์ผ ํ๋ ์ง์ ์ด ์์๋๋ก (3ํ, 1์ด), (1ํ, 2์ด), (2ํ, 3์ด)์ด๋ผ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด 5๊ฐ์ง์ ์๋๋ฆฌ์ค๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
1. (3ํ, 1์ด) → (3ํ, 2์ด) → (2ํ, 2์ด) → (1ํ, 2์ด) → (1ํ, 3์ด) → (2ํ, 3์ด)

2. (3ํ, 1์ด) → (3ํ, 2์ด) → (2ํ, 2์ด) → (2ํ, 1์ด) → (1ํ, 1์ด) → (1ํ, 2์ด) → (1ํ, 3์ด) → (2ํ, 3์ด)

3. (3ํ, 1์ด) → (2ํ, 1์ด) → (2ํ, 2์ด) → (1ํ, 2์ด) → (1ํ, 3์ด) → (2ํ, 3์ด)

4. (3ํ, 1์ด) → (2ํ, 1์ด) → (1ํ, 1์ด) → (1ํ, 2์ด) → (1ํ, 3์ด) → (2ํ, 3์ด)

5. (3ํ, 1์ด) → (2ํ, 1์ด) → (1ํ, 1์ด) → (1ํ, 2์ด) → (2ํ, 2์ด) → (2ํ, 3์ด)

์ ์ฝ ์กฐ๊ฑด
[์กฐ๊ฑด 1] 2 ≤ n ≤ 4
[์กฐ๊ฑด 2] 2 ≤ m ≤ n2
์ ๋ ฅ ํ์
์ฒซ ๋ฒ์งธ ์ค์๋ ๊ฒฉ์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ n๊ณผ ์์๋๋ก ๋ฐฉ๋ฌธํด์ผ ํ๋ ์นธ์ ์ m์ด ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ๋ n๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ํ์ ํด๋นํ๋ n๊ฐ์ ์๊ฐ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค. ์ฃผ์ด์ง๋ ์๋ 0 ๋๋ 1์ด๋ฉฐ, 0์ ๋น ์นธ์ 1์ ๋ฒฝ์ ์๋ฏธํฉ๋๋ค.
n + 2 ๋ฒ์งธ ์ค๋ถํฐ๋ m๊ฐ์ ์ค์ ๋ฐฉ๋ฌธํด์ผ ํ m๊ฐ์ ์นธ์ ์์น (x, y) ์์ด ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ํ ์ค์ ํ๋์ฉ ์์๋๋ก ์ฃผ์ด์ง๋๋ค. ์ฃผ์ด์ง๋ ์นธ์ ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฉฐ, ๋์ผํ ์นธ์ด ์ฌ๋ฌ ๋ฒ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ๊ฐ์ ํด๋ ์ข์ต๋๋ค.
์ถ๋ ฅ ํ์
์ฐจ๋์ด m๊ฐ์ ์ง์ ์ ์์๋๋ก ๋ฐฉ๋ฌธํ ์ ์๋ ์๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ๋ง์ฝ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด 0์ ์ถ๋ ฅํฉ๋๋ค.
์ ๋ ฅ ์์ 1
0 0 0
0 0 0
0 0 1
3 1
1 2
2 3
์ถ๋ ฅ ์์ 1
์ ๋ ฅ ์์ 2
0 0 1
0 0 0
0 0 1
3 1
1 2
2 3
์ถ๋ ฅ ์์ 2
๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ๋ ์ง๋จํ๊ฐ์์ BFS๋ก ํ์ด๋ฅผ ์ ์ถํ๋๋ฐ ์๊ณ ํํฐ๋ ํ์ด๋ฅผ ๋ณด๋ DFS๋ก ํธ์ จ๊ธธ๋ ์ฒจ๋ถํด๋ณธ๋ค!
dfs๋ฅผ ํ์ํ๋ฉด์ dfs ์ฌ๊ท๋ฅผ ๋ค ๋๊ณ ๋๋ฉด ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ ์์น๋ ๋ค์ visited[][]=0์ผ๋ก ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํด์ค์ผ ์ ์์ ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ ์ ์๋ค!
import sys
n,m=map(int, sys.stdin.readline().split(' '))
area=[[0]+list(map(int,sys.stdin.readline().strip().split(' '))) for _ in range(n)]
area.insert(0,[0]*(n+1))
visited=[[0]*(n+1) for _ in range(n+1)]
dest=[]
for i in range(1,m+1):
y,x=map(int, sys.stdin.readline().strip().split(' '))
dest.append((y,x))
directions=[(0,1),(1,0),(0,-1),(-1,0)]
ans=0
def dfs(y,x,level):
global ans
if (y,x)==dest[level]:
if level==m-1:
ans+=1
return
else:
level+=1
visited[y][x] = 1
for di in directions:
dy=y+di[0]
dx=x+di[1]
if 1<=dy<=n and 1<=dx<=n and visited[dy][dx]==0 and area[dy][dx]==0:
dfs(dy,dx,level)
visited[y][x] = 0
dfs(dest[0][0], dest[0][1], 1)
print(ans)
๋ค์์ ๋ด๊ฐ ํผ BFS ๋ฌธ์ ํ์ด์ด๋ค.
import sys
from collections import deque
n,m=map(int, sys.stdin.readline().split(' '))
area=[[0]+list(map(int,sys.stdin.readline().strip().split(' '))) for _ in range(n)]
area.insert(0,[0]*(n+1))
visited=[[0]*(n+1) for _ in range(n+1)]
dest=[]
for i in range(1,m+1):
y,x=map(int, sys.stdin.readline().strip().split(' '))
dest.append((y,x))
directions=[(0,1),(1,0),(0,-1),(-1,0)]
ans=0
queue=deque()
visited[dest[0][0]][dest[0][1]]=1
queue.append((dest[0][0],dest[0][1],1,visited))
while queue:
cury, curx, level, visited = queue.popleft()
if cury==dest[level][0] and curx==dest[level][1]:
if level==m-1:
ans+=1
continue
else:
level+=1
for di in directions:
dy=cury+di[0]
dx=curx+di[1]
if 1<=dy<=n and 1<=dx<=n and visited[dy][dx]==0 and area[dy][dx]==0:
new_visited = [arr[:] for arr in visited]
new_visited[dy][dx]=1
queue.append((dy,dx,level,new_visited))
print(ans)
๋์ DFS ํ์ด์ ๋ฌ๋ฆฌ, ๋งค๋ฒ ํ๋ง๋ค ๋ฐฉ๋ฌธ ๊ฒฝ๋ก๊ฐ ์ ์ฅ๋ new_visited ๋ฐฐ์ด์ ๋ฃ์ด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ n ๊ฐ์ด ํฌ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋๊ธฐ ๋๋ฌธ์ DFS ํ์ด๊ฐ ํจ์ฌ ๋ ์ข์ ํ์ด์ธ ๊ฒ ๊ฐ๋ค!
DFS ํ์ด์ ๊ฒฝ์ฐ ์์ 1๋ฒ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๋ตํ๊ฒ ํ๋ฆ์ ๊ทธ๋ ค๋ดค๋๋ฐ ๋ธ๋ก๊ทธ์ ํฌ์คํ ๋ชฉ์ ์ผ๋ก ๊ทธ๋ฆฐ ๊ฑด ์๋๋ผ์ ์์๋ณด๊ธฐ ํ๋ค ์ ์์ง๋ง ํน์ ๋์์ด ๋ ๊นํด์ ์ฌ๋ ค๋ณธ๋ค..!
'์๊ณ ๋ฆฌ์ฆ > ๊ทธ๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 14888 ๐ฅ] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (1) | 2023.08.31 |
---|---|
[๋ฐฑ์ค 1525 ๐ฅ] ํผ์ฆ (0) | 2023.08.28 |
[๋ฐฑ์ค 6087 ๐ฅ] ๋ ์ด์ ํต์ (0) | 2023.08.24 |
[๋ฐฑ์ค 14940 ๐ฅ] ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ (0) | 2023.08.20 |
[๋ฐฑ์ค 1238 ๐ฅ] ํํฐ (0) | 2023.08.15 |