[Python] SWEA 1226: 미로1
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)
'알고리즘 > SWEA' 카테고리의 다른 글
| [Python] SWEA 5209: 최소 생산 비용 (0) | 2023.03.29 |
|---|---|
| [Python] SWEA 1240 : 단순 2진 암호코드 (0) | 2023.02.27 |
| [Python] SWEA 4871: 그래프 경로 (0) | 2023.02.14 |
| [Python] SWEA 6485: 삼성시의 버스 노선 (0) | 2023.02.09 |
| [Python] SWEA 1859: 백만 장자 프로젝트 (0) | 2023.02.06 |
TAGS.
