728x90
https://school.programmers.co.kr/learn/courses/30/lessons/67259
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 다음 지점이 기록되어있지 않다면 비용으로 기록 후 탐색합니다.
2. 기록되어 있다면 기록된 비용과 현재 비용을 비교하여 현재 비용이 더 낮다면 다시 탐색합니다.
애매한 코드
- 프로그래머스 테스트케이스가 25개 밖에 없기 때문에 통과할 수 있었던 것 같습니다. 만약 더욱 다양한 테스트 케이스가 있었다면 통과하지 못했을 겁니다.
- dire배열을 상하좌우 순으로 배치하면 테스트 케이스 14번 25번이 실패합니다.
* 우상하좌 순으로 배치하면 통과합니다.
2) 중간에서 만나는 지점(예제 좌표 [3, 4])에서 비용이 무조건 작은 경우에만 탐색할 경우 제가 작성한 코드는 방향 순서에 따라 답이 달라집니다.
2_1) 예제
[[0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 1, 1, 1, 0],
[1, 0, 0, 1, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1, 0]]
# answer = 4500
(상하좌우 -> 4900, 우상하좌 -> 4500)
참고 https://school.programmers.co.kr/questions/42984
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import sys
sys.setrecursionlimit(1000)
def solution(board):
def DFS(x, y, before): # 좌표, before : 탐색했던 방향
for d in range(4):
c = board[x][y] + 100 if before == (d + 1) or before == 0 else board[x][y] + 600
# 시작점으로 돌아가지 않기
if x + dire[0][d] == 0 and y + dire[1][d] == 0: continue
if x + dire[0][d] < 0 or x + dire[0][d] >= len(board[0]): continue
if y + dire[1][d] < 0 or y + dire[1][d] >= len(board[0]): continue
if board[x + dire[0][d]][y + dire[1][d]] == 1 : continue
# 기록 되었던 곳보다 비용이 높으면 continue
if board[x + dire[0][d]][y + dire[1][d]] != 0 and board[x + dire[0][d]][y + dire[1][d]] < c: continue
board[x + dire[0][d]][y + dire[1][d]] = c
DFS(x + dire[0][d], y + dire[1][d], (d + 1))
#dire = [[-1, 1, 0, 0], [0, 0, -1, 1]]
# 우 하 상 좌
dire = [[0, 1, -1, 0], [1, 0, 0, -1]]
DFS(0, 0, 0)
return board[len(board) - 1][len(board) - 1]
728x90
'알고리즘' 카테고리의 다른 글
Python - 단어 변환 (1)브루트포스, (2) BFS (0) | 2023.06.13 |
---|---|
Python - 내리막 길 (1520) DP, DFS (0) | 2023.06.12 |
Python - 보석 쇼핑 (투 포인터) (0) | 2023.06.10 |
Python - 두 수의 합(3273) 투 포인터 (0) | 2023.06.09 |
Python - 초콜릿 식사 (2885) 그리디 (0) | 2023.06.07 |