#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(string name) {
// 완성해야 하는 이름의 길이만큼 미리 벡터를 만듬
vector<int> ret(name.length());
for(int i=0; i<ret.size(); i++){
int n = name[i] - 'A';
// A부터 시작하여 가는게 빠른지 Z로 돌아가서 뒤로가는게 빠른지 찾기
ret[i] = min(n, 26 - n);
}
int retSize = ret.size();
int ans = 0;
int start = 0;
while(1){
// 여기서 i는 몇칸 움직일 지를 결정하는 변수이다
// 즉 i가 1이면 오른쪽, 왼쪽으로 1칸을 확인한다.
int i = 0;
int left, right;
while(i != retSize){
//만약 start + i 가 name의 크기를 넘어서면 다시 앞에서부터 돌아오도록 만들어주는 조건
if(start+i >= retSize){
right = start+i - retSize;
}
else right = start + i;
// i칸 만큼 움직여서 ans에 더해줘야 할 값을 찾으면 break
if(ret[right] != 0){
start = right;
break;
}
if(start - i < 0){
left = start - i + retSize;
}
else left = start - i;
// i칸 만큼 움직여서 ans에 더해줘야 할 값을 찾으면 break
if(ret[left] != 0){
start = left;
break;
}
// 찾을때 까지 i를 증가시켜준다.
i++;
}
// 만약 i가 retSize가 되면 더이상 찾을 값이 없다는 것이므로 break
if(i== retSize) break;
// 알파벳을 바꾸는데 걸리는 값 더해주기
ans += ret[start];
// 이동하는데 필요한 값 더해주기
ans += i;
// 필요한 만큼 알파벳으로 바꿔주면 0으로 만들어주기
ret[start] = 0;
}
return ans;
}
이 문제는 내가 아직 부족하여 내 풀이말고 프로그래머스 맨 위에 나온 풀이는 잘 이해가 가지 못했다. 따라서 그냥 내 풀이도 결국 이중포문이기 때문에 ㅋㅋㅋㅋㅋ 내꺼를 더 확실하게 이해하는 것으로 넘어가야겠다. 문제가 개인적으로 좀 어려웠지만 잘 해결했다.