그리디
https://school.programmers.co.kr/learn/courses/30/lessons/42860
import java.util.*;
class Solution {
public int solution(String name) {
int upDownCnt = 0;
int leftRightCnt = name.length() - 1;
for (int i = 0; i < name.length(); i++) {
upDownCnt += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
int indexA = i + 1;
while(indexA < name.length() && name.charAt(indexA) == 'A') {
indexA++;
}
// Math.min(순서대로 진행하는 경우, 뒤로 돌아가는 경우)
leftRightCnt = Math.min(leftRightCnt, i + i + name.length() - indexA);
// Math.min(leftRightCnt, 처음부터 뒤로 갔다가 돌아와서 순서대로 진행하는 경우)
leftRightCnt = Math.min(leftRightCnt, (name.length() - indexA) * 2 + i);
}
return upDownCnt + leftRightCnt;
}
}
upDownCnt += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
name.charAt(i) - ‘A’
‘Z’ - name.charAt(i) + 1
int indexA = i + 1;
while(indexA < name.length() && name.charAt(indexA) == 'A') {
indexA++;
}
// Math.min(순서대로 진행하는 경우, 뒤로 돌아가는 경우)
leftRightCnt = Math.min(leftRightCnt, i + i + name.length() - indexA);
// Math.min(leftRightCnt, 처음부터 뒤로 갔다가 돌아와서 순서대로 진행하는 경우)
leftRightCnt = Math.min(leftRightCnt, (name.length() - indexA) * 2 + i);
int indexA = i + 1;
while(indexA < name.length() && name.charAt(indexA) == 'A') {
indexA++;
}
// 2. Math.min(순서대로 진행하는 경우, 뒤로 돌아가는 경우)
leftRightCnt = Math.min(leftRightCnt, i + i + name.length() - indexA);
// 3. Math.min(leftRightCnt, 처음부터 뒤로 갔다가 돌아와서 순서대로 진행하는 경우)
leftRightCnt = Math.min(leftRightCnt, (name.length() - indexA) * 2 + i);
3시간