알고리즘/SWEA
[Python] SWEA 1226: 미로1
suwonieee
2023. 2. 21. 17:43
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14vXUqAGMCFAYD
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제는 무난한 bfs 연습문제였다.
1차 시도
더보기
from collections import deque
import sys
input = sys.stdin.readline
dr = [0,0,-1,1]
dc = [1,-1,0,0]
def bfs(row, col):
visit = [[0 for _ in range(17)] for _ in range(17)]
q = deque()
q.append((row, col))
visit[row][col] = 1
while q:
vr, vc = q.popleft()
for k in range(4):
newr = vr + dr[k]
newc = vc + dc[k]
if 0<= newr<16 and 0<=newc<16 and maze[newr][newc] == 0:
if visit[newr][newc] == 0:
q.append((newr,newc))
visit[newr][newc] = visit[vr][vc] + 1
elif 0<=newr<16 and 0<=newc<16 and maze[newr][newc] == 3: #도착한 경우
print(f'#{tc} 1')
return
print(f'{tc} 0')
T = 10
for tc in range(1,T+1):
n = input()
maze = [list(map(int,input())) for _ in range(16)]
print(maze)
for row in range(16):
for col in range(16):
if maze[row][col] == 2:
bfs(row,col)
input을 받는 과정에서 문제가 있었다. input = sys.stdin.readline를 사용하는 바람에 TC의 줄바꿈 개행 문자가(\n) 같이 데이터에 딸려 들어간 것. 당연히 map에서 \n을 int처리할 수 없다는 오류를 내보냈다.map 함수를 사용하지 않고 input을 str로 받으면 16개의 data를 리스트 처리하는 것이 아니라 '\n'까지 데이터로 봐서 처리하고, 답이 잘 나오지 않게 된다. 교수님에게 여쭤본 후 readline이 개행문자까지 처리하는 것을 알게 되었고... strip() 처리를 해야 한다는 것을 알게 되었다.
ANS
from collections import deque
dr = [0,0,-1,1]
dc = [1,-1,0,0]
def bfs(row, col):
visit = [[0 for _ in range(17)] for _ in range(17)]
q = deque()
q.append((row, col))
visit[row][col] = 1
while q:
vr, vc = q.popleft()
for k in range(4):
newr = vr + dr[k]
newc = vc + dc[k]
if 0<= newr<16 and 0<=newc<16 and maze[newr][newc] == 0:
if visit[newr][newc] == 0:
q.append((newr,newc))
visit[newr][newc] = visit[vr][vc] + 1
elif 0<=newr<16 and 0<=newc<16 and maze[newr][newc] == 3: #도착한 경우
print(f'#{tc} 1')
return
print(f'#{tc} 0')
T = 10
for tc in range(1,T+1):
n = input()
maze = [list(map(int,input())) for _ in range(16)]
print(maze)
for row in range(16):
for col in range(16):
if maze[row][col] == 2:
bfs(row,col)
더보기
그냥 백준 풀 때나 readline 쓰고 SWEA 풀 때는 readline 사용하지 말자.............. 안 쓰니까 너무나도 깔끔하고 예쁘게 답 나온다...
굳이 쓰고 싶으면 이렇게 쓰자! n이 strip 받지 않도록 하기...
from collections import deque
import sys
input = sys.stdin.readline
dr = [0,0,-1,1]
dc = [1,-1,0,0]
def bfs(row, col):
visit = [[0 for _ in range(17)] for _ in range(17)]
q = deque()
q.append((row, col))
visit[row][col] = 1
while q:
vr, vc = q.popleft()
for k in range(4):
newr = vr + dr[k]
newc = vc + dc[k]
if 0<= newr<16 and 0<=newc<16 and maze[newr][newc] == 0:
if visit[newr][newc] == 0:
q.append((newr,newc))
visit[newr][newc] = visit[vr][vc] + 1
elif 0<=newr<16 and 0<=newc<16 and maze[newr][newc] == 3: #도착한 경우
print(f'#{tc} 1')
return
print(f'#{tc} 0')
T = 10
for tc in range(1,T+1):
n = input()
maze = [list(map(int,input().strip())) for _ in range(16)]
for row in range(16):
for col in range(16):
if maze[row][col] == 2:
bfs(row,col)