난이도 : D4
문제번호 : 1226
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
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 |
댓글