Study hard
(c++)백준 12026번: BOJ거리 본문
12026번: BOJ 거리
스타트가 링크를 만나는데 필요한 에너지 양의 최솟값을 출력한다. 만약, 스타트가 링크를 만날 수 없는 경우에는 -1을 출력한다.
www.acmicpc.net
[풀이]
DP를 이용하여 풀 수 있는 문제였다.
DP[i] : i번째 칸까지 가는데에 필요한 에너지 양의 최솟값
점화식
DP[j] = min(DP[j], (j-i)*(j-i)+DP[i])
#include <iostream>
#include <algorithm>//min, fill
using namespace std;
int N;
char street[1001];
int DP[1001];
void solution() {
DP[1] = 0;
for (int i = 1; i < N; i++) {
if (street[i] == 'B') {
for (int j = i + 1; j <= N; j++) {
if (street[j] == 'O')
DP[j] = min(DP[j], (j - i)*(j - i) + DP[i]);
}
}
else if (street[i] == 'O') {
for (int j = i + 1; j <= N; j++) {
if (street[j] == 'J')
DP[j] = min(DP[j], (j - i)*(j - i) + DP[i]);
}
}
else {
for (int j = i + 1; j <= N; j++) {
if (street[j] == 'B')
DP[j] = min(DP[j], (j - i)*(j - i) + DP[i]);
}
}
}
if (DP[N] == 9999999)
cout << -1 << '\n';
else
cout << DP[N] << '\n';
}
int main() {
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> street[i];
}
fill(DP, DP + 1001, 9999999);
solution();
return 0;
}
※변수 이름 BOJ로 하면 에러
'백준 > DP' 카테고리의 다른 글
(c++)백준 2281번: 데스노트 (0) | 2020.09.19 |
---|---|
(c++)백준 12996번: Acka (0) | 2020.09.19 |
(c++)백준 14238번: 출근 기록 (0) | 2020.09.18 |
(c++)백준 5557번: 1학년 (0) | 2020.09.18 |
(c++)백준 11049번: 행렬 곱셈 순서 (0) | 2020.09.16 |