난이도 : D4
문제번호 : 1226
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
아래 그림과 같은 미로가 있다. 16*16 행렬의 형태로 만들어진 미로에서 흰색 바탕은 길, 노란색 바탕은 벽을 나타낸다. 가장 좌상단에 있는 칸을 (0, 0)의 기준으로 하여, 가로방향을 x 방향, 세로방향을 y 방향이라고 할 때, 미로의 시작점은 (1, 1)이고 도착점은 (13, 13)이다. 주어진 미로의 출발점으로부터 도착지점까지 갈 수 있는 길이 있는지 판단하는 프로그램을 작성하라. |
입력
각 테스트 케이스의 첫 번째 줄에는 테스트 케이스의 번호가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다. |
출력
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 도달 가능 여부를 1 또는 0으로 표시한다 (1 - 가능함, 0 - 가능하지 않음). |
예시
입력 | 출력 |
1 1111111111111111 1210000000100011 1010101110101111 1000100010100011 1111111010101011 1000000010101011 1011111110111011 1010000010001011 1010101111101011 1010100010001011 1010111010111011 1010001000100011 1011101111101011 1000100000001311 1111111111111111 1111111111111111 2 1111111111111111 1200000010000011 1011111011111011 1000001010000011 1110101010111011 1010101010100011 1011111010111111 1000001010000011 1011101011111011 1010101010000011 1010101010111111 1010100000130011 1010111111111011 1000000000000011 1111111111111111 1111111111111111 ... |
#1 1 #2 1 ... |
2. 문제풀이
특정 지점에서 출발했을때 목표지점에 도착을 할 수 있는지 확인하는 문제이다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#D4 1226 미로1
#이동리스트
move_list = [(1, 0), (-1, 0), (0, 1), (0, -1)]
def dfs(y, x):
global result
#현재 위치가 도착점이라면
#목표점에 도달했거나 결과가 이미나와있다면 리턴
if map_list[y][x] == 3 or result:
result = 1
return
for i, j in move_list:
d_y = y + i
d_x = x + j
#반복하다가 결과가 나왔다면 리턴
if result:
return
#벽이아니거나 왔던 위치가 아니라면
if map_list[d_y][d_x] != 1 :
#현재위치를 벽으로 체크하고 재귀
map_list[y][x] = 1
dfs(d_y, d_x)
T = 10
for _ in range(T):
t = int(input())
N = 16
map_list = [list(map(int, list(input()))) for _ in range(N)]
result = 0
#1,1 위치부터 탐색시작
dfs(1,1)
print('#{} {}'.format(t, result))
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#D4 1226 미로1
from collections import deque
#이동리스트
move_list = [(1, 0), (-1, 0), (0, 1), (0, -1)]
def bfs():
queue = deque()
queue.append((1, 1))
map_list[1][1] = 1
while len(queue):
y, x = queue.popleft()
if map_list[y][x] == 3:
return 1
map_list[y][x] = 1
for i in move_list:
my = i[0] + y
mx = i[1] + x
if 0 <= my < N and 0 <= mx < N and map_list[my][mx] != 1:
queue.append((my, mx))
return 0
for _ in range(10):
t = int(input())
N = 16
map_list = [list(map(int, list(input()))) for _ in range(N)]
#1,1 위치부터 탐색시작
print('#{} {}'.format(t, bfs()))
|
아래가 dfs 위에가 bfs이다.
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
행렬찾기 Python(SW Expert Academy, SWEA) (0) | 2020.06.10 |
---|---|
Contact Python(SW Expert Academy, SWEA) (0) | 2020.06.09 |
계산기3 Python(SW Expert Academy, SWEA) (0) | 2020.06.07 |
Ladder2 Python(SW Expert Academy, SWEA) (0) | 2020.06.06 |
Ladder1 Python(SW Expert Academy, SWEA) (0) | 2020.06.05 |
댓글