BOJ거리 실버1 (백준, DP)
2023. 1. 27. 16:28ㆍ코딩 테스트 준비
728x90
반응형
N = int(input())
road = list(input())
dp = [float('inf')] * N
dp[0] = 0
for i in range(1, N):
for j in range(i):
sig = 0
if road[i] == 'B' and road[j] == 'J':
dp[i] = min(dp[i], dp[j]+(i-j)**2)
if road[i] == 'O' and road[j] == 'B':
dp[i] = min(dp[i], dp[j]+(i-j)**2)
if road[i] == 'J' and road[j] == 'O':
dp[i] = min(dp[i], dp[j]+(i-j)**2)
if dp[-1] != float('inf'):
print(dp[-1])
else:
print(-1)
이 문제를 알게 된 게 행운이라고 생각한다.
반복되는 문자의 형태를 규칙으로 하는 경우, 뒤에 오는 정해진 값이 존재할때 자신의 값과 전의 값에 규칙을 적용한 값을 더한 것 중 작은 것으로 초기화하는 테크닉을 배울 수 있었다.
잊지말자.
728x90
반응형
'코딩 테스트 준비' 카테고리의 다른 글
타노스 실버 3 (백준, 문자열) (0) | 2023.01.27 |
---|---|
로봇 청소기 골드 5 (백준, 구현) (0) | 2023.01.27 |
기타리스트 실버1 (백준, DP) (0) | 2023.01.27 |
가장 큰 증가 부분 수열 실버2 (백준, DP) (0) | 2023.01.26 |
부분 수열의 합 실버2 (백준, DP) (0) | 2023.01.26 |