https://school.programmers.co.kr/learn/courses/30/lessons/169199
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
상하좌우 중 한 방향을 선택해 장애물이나 벽에 부딪힐때까지 이동하여 목표 지점에 도달하는 보드게임이 있다.
목표지점에 도달하기위한 최소 이동 횟수를 구하라
처음에 보드판 가로길이와 세로길이가 동일한줄알고 풀었다. 출력예시만 봐도 알 수 있는건데...
from collections import deque
def solution(board):
answer = -1
start_x, start_y = 0, 0
N, M = len(board), len(board[0])
matrix = [[-1]*M for _ in range(N)]
for i in range(N):
for j in range(M):
if board[i][j] == 'G':
goal_x = i
goal_y = j
if board[i][j] == 'R':
start_x = i
start_y = j
q = deque([[start_x, start_y]])
matrix[start_x][start_y] = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
while q:
x, y = q.popleft()
if board[x][y] == 'G':
answer = matrix[x][y]
break
for i in range(4):
nx, ny = x, y
while 0 <= (nx + dx[i]) < N and 0 <= (ny + dy[i]) < M:
if board[nx + dx[i]][ny + dy[i]] == 'D':
break
nx += dx[i]
ny += dy[i]
if matrix[nx][ny] == -1:
q.append([nx, ny])
matrix[nx][ny] = matrix[x][y] + 1
return answer
[프로그래머스] 160585. 혼자서 하는 틱택토 | 구현 | 파이썬, 소스코드, 정답 (0) | 2023.05.07 |
---|---|
[프로그래머스] 169198. 당구연습 | 수학 | 파이썬, 소스코드, 정답 (0) | 2023.05.06 |
[프로그래머스] 172927. 광물 캐기| 그리디 | 파이썬, 소스코드, 정답 (1) | 2023.05.04 |
[프로그래머스] 176962. 과제 진행하기 | 구현 | 파이썬, 소스코드, 정답 (0) | 2023.05.03 |
[프로그래머스] 178870. 연속된 부분 수열의 합 | 투포인터 | 파이썬, 소스코드, 정답 (0) | 2023.05.02 |