티스토리 뷰
- 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/169199
- 풀이
나는 사실 프로그래머스를 거의 안 푼다. 입출력 자체가 백준이 나에게 좀 더 편하기도 하고.. 백준에 너무 익숙해져버린 나머지 프로그래머스는 손을 잘 안댈 때가 많았는데 백준 풀다가 현타가 조금 와서 프로그래머스 문제를 한 번 풀어봤다.
이 문제가 레벨 2 문제였는데, 백준에서 이 문제와 비슷한 아이디어를 쓰는 구슬탈출 문제가 골1인걸 보면 체감상 이 문제도 한 레벨 3 정도는 되야 하지 않을까 ? 싶은 생각이 들기도 했다(근데 구슬탈출 문제가 더 어렵긴 하다).
풀이를 보자면, bfs 문제인데 그냥 탐색이 아니라 벽이나 장애물에 걸렸을 때 횟수를 카운트 해서 구현하는 문제였다.
장애물을 만났을 때, 그리고 벽을 탈출했을 때를 염두에 두고 구현하면 되는 문제다.
- 코드
from collections import deque
dx = [0,0,-1,1]
dy = [-1,1,0,0]
def solution(board):
N, M = len(board), len(board[0])
queue = deque()
visited = [[0] * M) for _ in range(N)]
for i in range(N):
for j in range(M):
if board[i][j] == 'R':
visited[i][j] = 1
queue.append((i, j))
while queue:
a, b = queue.popleft()
if board[a][b] == 'G':
return visited[a][b] - 1
for i in range(4):
nx, ny = a, b
while True:
nx, ny = nx+dx[i], ny+dy[i]
if 0 <= nx < N and 0<= ny < M and board[nx][ny]=='D':
nx -= dx[i]
ny -= dy[i]
break
if nx<0 or nx>=N or ny<0 or ny>=M:
nx -= dx[i]
ny -= dy[i]
break
if not visited[nx][ny]:
visited[nx][ny] = visited[a][b] + 1
queue.append((nx, ny))
return -1
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준 10026
- 실버3
- 14938
- 리액트 츨겨찾기
- 리액트
- BOJ
- WOFF2
- boj 2589
- boj 10026 python
- 리액트 최근검색
- 1270
- 백준
- 서강그라운드
- 보정평균
- 최근검색 기능
- BFS
- 레벨 2
- 알고리즘
- 6986
- Python
- opgg #클론코딩 #할수있다
- 폰트 최적화
- 구현
- 마법사 상어
- 목데이터
- 데이크스트라
- 파이썬
- 리코쳇 로봇
- 도넛 행성
- 21610
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함