- 자리 이동하는 거 cur위치에서 타겟 자리로 좌측이동 vs 우측 이동한 값의 최소값을 구하고,
- 알파벳을 위로 이동 vs 아래로 이동 최소값을 구한다
- 1번과 2번의 값을 더한 값을 dp값에 넣어주고.
- 최종으로 다 더해주는 방법으로 진행했다.
// 반례
지금 내가 만든 반복문으로는 순차적으로 밖에 진행하지 못하지만,
반례를 보면 0번 인덱스 마치고, 마지막 인덱스로 이동해서 진행하는 것이
최소화 할 수 있다.
이 부분을 생각하지 못해서 만점아님..
추후에 다시 풀자...
#include <string>
#include <vector>
using namespace std;
//0823 16:03 ~ 17:11
int solution(string name) {
int answer = 0;
int dp[20] = {0,};
int curIndex = 0;
for(int index = 0; index < name.length(); index++)
{
//타겟값이 a일때는 상관없다. 자리 이동값만 구하면됨
//0번 인덱스에서 오른쪽으로 몇번째 위치해 있는지
if(name[index] != 'A')
{
//알파벳 이동했을때의 최소값 - 2번
int alphaA = 0; //a에서 뺏을 때.
alphaA = name[index] - 'A';
//z에서 뺏을때
int alphaZ = 0;
alphaZ = 'Z' - name[index] + 1;
int upDown = 0;
upDown = min(alphaA, alphaZ);
//자리 이동했을때의 최소값 - 2번
int locStart = 0;
locStart = index - curIndex;
//0번 인덱스에서 좌측으로 이동할때 몇번 이동하는지
int locEnd = 0;
//locEnd = name.length() - index;
locEnd = name.length() - index + curIndex ;
int leftRight = min(locStart, locEnd);
dp[index] = upDown + leftRight;
answer += dp[index];
curIndex = index;
}
//answer = dp[index];
//break;
//최소값을 dp에 더하기
}
return answer;
}