12026번: BOJ 거리
스타트가 링크를 만나는데 필요한 에너지 양의 최솟값을 출력한다. 만약, 스타트가 링크를 만날 수 없는 경우에는 -1을 출력한다.
www.acmicpc.net
dp 문제입니다. 순회를 하면서 전 포지션의 최소값을 dp에 기록해 줍니다.
N = int(input())
street = list(input())
max_num = 9999999
dp = [max_num] * N
dp[0] = 0
def prev_position(x):
if x == 'B':
return 'J'
elif x == 'O':
return 'B'
elif x == 'J':
return 'O'
for i in range(1, N):
prev = prev_position(street[i])
for j in range(i):
if street[j] == prev:
dp[i] = min(dp[i], dp[j] + pow(i - j, 2))
print(dp[N - 1] if dp[N - 1] != max_num else -1)
'알고리즘' 카테고리의 다른 글
백준_14888 (0) | 2021.04.25 |
---|---|
백준_20055 (0) | 2021.04.25 |
프로그래머스_등굣길 (0) | 2021.04.11 |
프로그래머스_주식가격 (0) | 2021.04.04 |
프로그래머스_위장 (0) | 2021.04.04 |