티스토리 뷰
반응형
문제
- NxN 크기의 미로에서 출발지에서 목적지에 도착하는 경로가 존재하는지 확인하여 도착할 수 있으면 1, 아니면 0을 출력한다. 출발지는 2이고 도착지는 3이다. 1은 벽이고 0이 진행할 수 있는 경로이다.
문제 상황
- 방문 여부를 체크하며 방문하지 않은 곳을 방문하여 3이 아닐 시에 그 주변을 탐색한다.
해결 전략
- search 함수를 만들어 방문 위치를 갱신하며 3을 찾고, 못찾았을 경우 그 주변의 0을 찾아 다시 그 위치에서 탐색을 시작한다.
코드
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
35
36
37
38
39
40
41
|
# 0 통로, 1 벽, 2 출발점, 3 도착점
# 2에서 3으로 도착 가능하면 1, 아니면 0을 출력
# 주변에 3이 있는지 탐색하고, 없으면 0에서 다시 탐색하는 함수
def search(lst, x, y, check):
global is_check
# 하, 상, 좌, 우 검색
dx, dy = [1,-1,0,0], [0,0,-1,1]
for i in range(4):
xx = x + dx[i]
yy = y + dy[i]
# 주변 탐색이 구간을 벗어나지 않을 때 & 방문한 적이 없는 위치일 때
if 0<=xx<len(lst) and 0<=yy<len(lst) and not check[xx][yy]:
# 방문 여부를 갱신
check[xx][yy] = True
# 만약 도착한 곳이 목적지라면 가능 여부를 True로 바꿔준다.
if lst[xx][yy] == 3 :
is_check = True
# 도착한 곳이 0이라면 갱신된 방문 여부를 가지고 다시 그 부분에서 체크를 진행한다.
elif lst[xx][yy] == 0 :
search(lst,xx,yy,check)
T = int(input())
for idx in range(T):
N = int(input())
# 미로 입력받기
maze = [list(map(int, list(input()))) for _ in range(N)]
# 방문 여부를 확인하는 리스트
cache = [[False for _ in range(N)] for i in range(N)]
# 3까지 도달 가능한지 여부 확인
is_check = False
for i in range(N):
for j in range(N):
# 출발지를 찾는다.
if maze[i][j] == 2:
search(maze, i, j, cache)
if is_check:
print(f"#{idx+1} 1")
else:
print(f"#{idx+1} 0")
|
cs |
해설
- is_check를 전역변수로 넣어 검색한 결과를 담을 수 있게 하였다. 진행 한 곳이 1일 경우, 즉 벽일 경우는 어차피 움직일 수 없기 때문에 조건은 진행 가능한 0일 때와, 목적지인 3일 때만 존재한다.
새로 학습한 것 & 실수
- .
출처 - https://swexpertacademy.com/main/
반응형
'알고리즘 학습 > 삼성 SWEA' 카테고리의 다른 글
SWEA - 회전 (5097) [Python] (0) | 2020.08.26 |
---|---|
SWEA - 토너먼트 카드게임 (4880) [Python] (0) | 2020.08.26 |
SWEA - Forth (4874) [Python] (0) | 2020.08.26 |
SWEA - 반복문자 지우기 (4873) [Python] (0) | 2020.08.25 |
SWEA - 그래프 경로 (4871) [Python] (0) | 2020.08.25 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Brackets#Stacks and Queues#Codility#Python
- 순열사이클#BOJ#Python
- 백준 알고리즘#BackTracking
- 토마토#백준알고리즘#Python
- Swift#Tuples#Range
- N으로 표현#DP#Programmers#Python
- 쿼드트리#BOJ#분할정복#Python
- 리모컨#완전탐색#BOJ#Python
- Distinct#Codility#Python
- 배열합치기#분할정복#BOJ#Python
- 암호코드#dp#BOJ#Python
- 반복수열#백준알고리즘#Python
- 랜선자르기#이분탐색#BOJ#Python
- django#slicing
- PassingCars#Codility#Python
- Triangle#Sorting#Codility#Python
- 병든 나이트#BOJ#탐욕법#Python
- API#lazy#
- 나무자르기#BOJ#이분탐색#Python
- 공유기 설치#BOJ#이분탐색#Python
- 종이자르기#분할정복#BOJ#Python
- 날짜 계산#BOJ#완전탐색#Python
- 파이썬알고리즘인터뷰#4장
- filter#isalnum#lower
- django
- NumberofDiscIntersections#Codility#Sort#Python
- 텀 프로젝트#백준알고리즘#Python
- 섬의개수#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- 터틀비치#리콘#xbox#controller
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함