반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 프로그래머스
- DP
- 부수입
- 밸만포드
- ai부수입
- 구글애드몹
- 투포인터
- 그리디
- 앱제작
- 투잡
- 에라스테네스의 체
- 코테
- 콜랩오류
- 2018카카오
- AI논문
- 논문추천
- 2021카카오
- 백준
- 바이브코딩
- 밸만포드알고리즘
- 코딩테스크
- 코딩테스트
- 2020카카오
- 백트레킹
- 파이썬
- 코딩오류
- 브루드포스
- pccp
- Python
- 2018캐시
Archives
- Today
- Total
kiteday 님의 블로그
[프로그래머스-파이썬] 경주로신설 본문
반응형
SMALL
https://school.programmers.co.kr/learn/courses/30/lessons/67259
이 문제의 핵심은 동서남북으로 탐색하며 이전 방향대비 cost가 최소화 되는 쪽으로 이동시키는 것이다.
직선으로 가면 + 100 꺾은선으로 가면 +600을 해야한다.
바로 코너비용과 한칸 이동한 비용을 합쳐야 하기 때문이다.
from collections import deque
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def solution(board):
answer = 0
INF = int(1e9)
N = len(board)
# 방향, x, y
min_cost = [[[INF]*N for _ in range(N)] for _ in range(4)]
q = deque()
# 동,서,남,북 : 0,1,2,3
if board[0][1] == 0:
q.append((100, 0, 1, 0))
min_cost[0][0][1] = 100
if board[1][0] == 0:
q.append((100, 1, 0, 2))
min_cost[2][1][0] = 100
while q:
cost, x, y, direction = q.popleft()
print(x, y)
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
nc = 0
if 0<= nx <N and 0<=ny<N and board[nx][ny]==0:
if i == direction:
nc = cost + 100
else:
nc = cost + 600
if nc < min_cost[i][nx][ny]:
min_cost[i][nx][ny] = nc
q.append((nc, nx, ny, i))
# print(min_cost)
return min(min_cost[d][N-1][N-1] for d in range(4))LIST
'코딩테스트' 카테고리의 다른 글
| [프로그래머스-파이썬] 캐시 (0) | 2025.12.08 |
|---|---|
| [프로그래머스-파이썬] 뉴스클러스터링 (0) | 2025.12.08 |
| [백준-파이썬] 9466 텀프로젝트 (0) | 2025.12.03 |
| [프로그래머스-파이썬] 광고 삽입 (0) | 2025.12.02 |
| [프로그래머스-파이썬] 보석쇼핑 (0) | 2025.12.02 |