https://www.acmicpc.net/problem/11567
11567번: 선진이의 겨울 왕국
첫 번째 테스트 케이스의 경우에는 (1,6) → (2,6) → (3,6) → (4,6) → (4,5) → (4,4) → (4,3) → (4,2) → (4,1) → (3,1) → (2,1) → (2,2) → (2,3) → (1,3) → (1,2) → (2,2) 의 순서로 가면 탈출이 가능하다.
www.acmicpc.net
문제 조건이 헷갈려서
체감적으로 까다로울 수 있는 문제.
이 문제에서 주의할 점들.
1. 도착점이 이미 X일 수 있다는 점.
2. 움직일 때 추락이 가능하다는 점.
3. 출발,도착점이 같을 수 있다는 점.
여기서 2번이 직관적으로 와닿지 않는데요.
그냥 일반적인 탈출만 생각하면
'시작점과 도착점이 같은데
도착점이 뚫린 위치면
바로 탈출하는거 아님??'
이렇게 생각을 하기 쉽습니다.
저도 그렇게 생각하고 처음에 문제를 풀었다가
조금 헤맸습니다.
여기 문제를 읽어보면
'손상된 얼음을 다시 밟아야 추락한다'라고 되어있어서
가만히 있으면 못빠져 나가고
움직인 곳이 손상+도착점이어야지
탈출이 가능하다는 점.
#백준 11567번 선진이의 겨울왕국
from collections import deque
dx=[0,0,1,-1]
dy=[1,-1,0,0]
N,M=map(int,input().split())
room=[list(input().rstrip()) for _ in range(N)]
sx,sy=map(int,input().split())
ex,ey=map(int,input().split())
sx-=1
sy-=1
ex-=1
ey-=1
def bfs():
visited=[[False]*M for _ in range(N)]
visited[sx][sy]=True
q=deque()
q.append((sx,sy))
while q:
x,y=q.popleft()
for d in range(4):
nx=x+dx[d]
ny=y+dy[d]
if nx<0 or nx>=N or ny<0 or ny>=M:
continue
if visited[nx][ny]==True:
#이미 얼음을 깬 곳이 도착점이라면
if nx==ex and ny==ey:
print("YES")
return
#만약 그냥 길이라면
else:
continue
if room[nx][ny]=='X':
#얼음 꺤 길이 도착점이라면
if nx==ex and ny==ey:
print("YES")
return
else:
continue
q.append((nx,ny))
visited[nx][ny]=True
print("NO")
bfs()
문제의 설명이 좀 불친절하긴 한데...
문제 조건을 읽는 연습한다는 점에서 공부할 점이 있는 문제입니다.
[프로그래머스] 파괴되지 않은 건물(파이썬)-카카오 인턴쉽 기출 (0) | 2022.10.04 |
---|---|
[프로그래머스]k진수에서 소수 개수 구하기(파이썬) -카카오 인턴쉽 기출 (0) | 2022.10.04 |
[백준 12908번] 텔레포트3 (파이썬) (0) | 2022.10.03 |
[백준 1726번] 로봇(파이썬) (0) | 2022.09.29 |
[백준 1520번] 내리막(파이썬) (0) | 2022.09.29 |
댓글 영역
Tabris4547님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.