-
[๋ฐฑ์ค] 1525 ํผ์ฆ with PythonPS 2022. 6. 14. 16:47728x90๋ฐ์ํ
๐ BOJ 1525 ํผ์ฆ
๐ก ์กฐ๊ฑด
- 3ร3 ํ์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐ ์ฑ์์ ธ ์๋ค. ์ค๋ฅธ์ชฝ ์๋ ๊ฐ์ฅ ๋ ์นธ์ ๋น์ด ์๋ ์นธ์ด๋ค.
1 2 3
4 5 6
7 8
- ์ด๋ค ์์ ์ธ์ ํด ์๋ ๋ค ๊ฐ์ ์นธ ์ค์ ํ๋๊ฐ ๋น์ด ์์ผ๋ฉด, ์๋ฅผ ๊ทธ ์นธ์ผ๋ก ์ด๋์ํฌ ์๊ฐ ์๋ค.
๋ฌผ๋ก ํ ๋ฐ๊นฅ์ผ๋ก ๋๊ฐ๋ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅํ๋ค.
์ฐ๋ฆฌ์ ๋ชฉํ๋ ์ด๊ธฐ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ต์์ ์ด๋์ผ๋ก ์์ ๊ฐ์ ์ ๋ฆฌ๋ ์ํ๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ๋ค์์ ์๋ฅผ ๋ณด์.
1 3
4 2 5
7 8 6
1 2 3
4 5
7 8 61 2 3
4 5
7 8 61 2 3
4 5 6
7 8- ๊ฐ์ฅ ์ ์ํ์์ ์ธ ๋ฒ์ ์ด๋์ ํตํด ์ ๋ฆฌ๋ ์ํ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ด์ ๊ฐ์ด ์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- ์ธ ์ค์ ๊ฑธ์ณ์ ํ์ ์ฑ์์ ธ ์๋ ์ํ ๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ํ ์ค์ ์ธ ๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๋น ์นธ์ 0์ผ๋ก ๋ํ๋ธ๋ค.
- ์ฒซ์งธ ์ค์ ์ต์์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ด๋์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ -1์ ์ถ๋ ฅํ๋ค.
- BFS, ๊ทธ๋ํํ์ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from collections import deque from sys import stdin arr = [] c = [1, 2, 3, 4, 5, 6, 7, 8, 0] x, y = 0, 0 for i in range(3): data = list(map(int, stdin.readline().split())) arr.append(data) for j in range(3): if data[j] == 0: x, y = i, j dx, dy = [1, 0, 0, -1], [0, 1, -1, 0] def swap(a, b): return b, a def solve(x, y): q = deque() temp = [] for p in arr: temp.extend(p) q.append((0, x, y, temp)) visited = set() while q: cnt, x, y, check_list = q.popleft() # visited.discard(tuple(check_list)) if check_list == c: return cnt else: temp = [check_list[idx:idx + 3] for idx in range(0, 7, 3)] for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0 <= nx < 3 and 0 <= ny < 3: temp[x][y], temp[nx][ny] = swap(temp[x][y], temp[nx][ny]) concat_list = [] for i in temp: concat_list.extend(i) if tuple(concat_list) not in visited: visited.add(tuple(concat_list)) q.append((cnt + 1, nx, ny, concat_list)) temp[x][y], temp[nx][ny] = swap(temp[x][y], temp[nx][ny]) return -1 print(solve(x, y))
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
1 0 3 4 2 5 7 8 6
์คํ๊ฒฐ๊ณผ
3
โจ๏ธ ๋ฌธ์ ํ์ด
- ํผ์ฆ์ ์ซ์๋ฅผ ์ฎ๊ธฐ๋ฉด์ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ์ ๋ ฌ๋ ์ํ๊ฐ ํ์ธ๋์์ผ๋ฉด cnt๋ฅผ ๋ฆฌํดํด์ค๋ค.
- ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ค๊ณ ํ์ผ๋, ์ด๋์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์๋ -1๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1915 ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ with Python (0) 2022.06.17 [๋ฐฑ์ค] 1700 ๋ฉํฐํญ ์ค์ผ์ค๋ง with Python (0) 2022.06.16 [๋ฐฑ์ค] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ with Python (0) 2022.06.14 [๋ฐฑ์ค] 10451 ์์ด ์ฌ์ดํด with Python (0) 2022.06.14 [๋ฐฑ์ค] 2644 ์ด์๊ณ์ฐ with Python (0) 2022.06.13 - 3ร3 ํ์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐ ์ฑ์์ ธ ์๋ค. ์ค๋ฅธ์ชฝ ์๋ ๊ฐ์ฅ ๋ ์นธ์ ๋น์ด ์๋ ์นธ์ด๋ค.