class Solution {
public int solution(String name) {
int answer = 0;
int notA = 0;
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) != 'A') {
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
notA++;
}
}
boolean[] visited = new boolean[name.length()];
if (name.charAt(0) != 'A') {
visited[0] = true;
notA--;
}
int i = 0;
int d = 1;
while (notA > 0) {
if (!visited[(i + d) % name.length()] && name.charAt((i + d) % name.length()) != 'A') {
answer += d;
i = (i + d) % name.length();
visited[i] = true;
d = 1;
notA--;
continue;
}
if (!visited[i >= d ? i - d : name.length() - (d - i)] && name.charAt(i >= d ? i - d : name.length() - (d - i)) != 'A') {
answer += d;
i = i >= d ? i - d : name.length() - (d - i);
visited[i] = true;
d = 1;
notA--;
continue;
}
d++;
}
return answer;
}
}
제출하니 마지막 테스트 케이스 하나만 틀렸다고 떴는데 원인을 모르겠다.
다음에 다시 도전해봐야겠다.
처음엔 왼쪽이나 오른쪽 한방향으로만 쭉 가는걸 생각했는데
갔다가 돌아오는게 더 빠른 경우도 있다는걸 알게되었다.
예외상황을 꼼꼼히 체크해봐야겠다는 생각이 한 번 더 든 순간이었다.
코드가 뭔가 지저분한데 다음에 기회가 된다면 다듬어봐야겠다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges