class Solution {
public int solution(String name) {
int UD = 0;
int length = name.length();
int index; // 다음 값들을 확인할 때 사용
int LR = length - 1; // 좌우 움직임 수를 체크
for(int i = 0; i < name.length(); i++){
char curChar = name.charAt(i);
// 위아래
UD += getUpDown(curChar);
index = i + 1;
// 연속되는 A 갯수 확인
while(index < length && name.charAt(index) == 'A'){
index++;
}
// 순서대로 가는 것과, 뒤로 돌아가는 것 중 이동수가 적은 것을 선택
// move -> 순서대로 가는거
// i * 2 + length - index -> 뒤로 되돌아 가는거
// 왜 i * 2 ?
// 현재위치까지 왔다가 되돌아 가는경우 ex) i == 2 면 1 2 2 1
// length - index ?
// 뒤로 가는거 계산
// 하지만 이 경우는 처음에 앞으로 갔다가 뒤로가는걸 상정
int reverse = i * 2 + length - index;
if (LR > reverse) LR = reverse;
// 처음부터 뒷부분을 먼저 입력하는 것이 더 빠른 경우
int reverse2 = (length - index) * 2 + i;
if (LR > reverse2) LR = reverse2;
}
return UD + LR;
}
public int getUpDown(char tmpChar) {
// 문자는 코드번호로 이어져 있으니까 그냥 뺄셈하면 나옴
char startChar = 'A';
char endChar = 'Z';
// 정방향
int forward = tmpChar - startChar;
// 역방향
int reverse = endChar - tmpChar + 1;
if (forward > reverse) return reverse;
return forward;
}
}
아 근데 이건 문제가 좀 ..
이건 머리가 안굴러가서 테스트케이스 이것저것 막 넣어서 했더니 안되는것도 있어서 대가리 겁나 굴렸는데
그냥 제출해보니까 통과되고 읭? 머지 싶었음