만들고자 하는 이름이 매개변수로 주어질 때 조이스틱 조작 횟수의 최솟값을 찾는 형식이다.
알파벳을 아스키코드 값으로 변경하여 값이 Z에 가까운지 A에 가까운지 비교한 후, Z에 가까운 경우를 탐지하여 조이스틱의 방향을 결정.
커서 위치가 바뀌게 되는 경우는 총 세 가지.
여기서 중요한 점은 왼쪽 오른쪽으로 이동한 수를 지속적으로 갱신해서 연속된 A가 발생했을 시 유턴을 하는 것이 옳은 지, 지속적으로 나아갈지 인식하는 것이 중요한 포인트이다.
import java.util.Arrays;
class Solution {
public int solution(String name) {
int answer = 0;
int move = name.length() - 1; // 오른쪽으로 쭉 간 횟수
for(int i = 0; i < name.length(); i++) {
answer += Math.min(name.charAt(i) - 'A', 26 - (name.charAt(i) - 'A')); //상,하 알파벳 맞추기
if (i < name.length() - 1 && name.charAt(i + 1) == 'A') {//다음 문자가 A일경우
int endA = i + 1;
while(endA < name.length() && name.charAt(endA) == 'A')
endA++;
move = Math.min(move, i * 2 + (name.length() - endA));// 오른쪽으로 갔다 다시 왼쪽으로 꺾기 일때 수
move = Math.min(move, i + (name.length() - endA) * 2);// 왼쪽으로 갔다 다시 오른쪽으로 꺾기 일때 수
}
}
return answer + move;
}
}```