728x90
https://school.programmers.co.kr/learn/courses/30/lessons/136797
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
분석
2023.06.27 - [programmers/KAKAO] - 양과 늑대 (DFS)
양과 늑대 (DFS)
""" 2 ≤ info의 길이 ≤ 17 당신이 모은 양의 수보다 늑대의 수가 같거나 더 많아지면 바로 모든 양을 잡아먹어 버립니다. 당신은 중간에 양이 늑대에게 잡아먹히지 않도록 하면서 최대한 많은 수
karla.tistory.com
2023.07.03 - [programmers/KAKAO] - 사라지는 발판 (DFS)
사라지는 발판 (DFS)
https://school.programmers.co.kr/learn/courses/30/lessons/92345 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는
karla.tistory.com
풀이
import sys, math
sys.setrecursionlimit(200000)
from collections import defaultdict
cache = defaultdict(dict)
W = [
[1, 7, 6, 7, 5, 4, 5, 3, 2, 3], # 0
[7, 1, 2, 4, 2, 3, 5, 4, 5, 6], # 1
[6, 2, 1, 2, 3, 2, 3, 5, 4, 5], # 2
[7, 4, 2, 1, 5, 3, 2, 6, 5, 4], # 3
[5, 2, 3, 5, 1, 2, 4, 2, 3, 5], # 4
[4, 3, 2, 3, 2, 1, 2, 3, 2, 3], # 5
[5, 5, 3, 2, 4, 2, 1, 5, 3, 2], # 6
[3, 4, 5, 6, 2, 3, 5, 1, 2, 4], # 7
[2, 5, 4, 5, 3, 2, 3, 2, 1, 2], # 8
[3, 6, 5, 4, 5, 3, 2, 4, 2, 1], # 9
] # W[i][j] : i번째 숫자에서 j번째 숫자로 이동하여 누를 때의 가중치
def solution(numbers):
def solve(i, left, right):
if i==len(numbers):
return 0
if (left, right) in cache[i]:
return cache[i][(left, right)]
w=math.inf
num=numbers[i]
if num!=left: # 오른손 이동
w=min(w, solve(i+1,num,left)+W[right][num])
if num!=right: # 왼손 이동
w=min(w, solve(i+1,num,right)+W[left][num])
cache[i][(left, right)] = w
return w
numbers = list(int(x) for x in numbers)
return solve(0,4,6) # 최소한의 시간으로 타이핑을 하는 경우의 가중치 합
728x90