Algorithm/Programmers

조이스틱 : Java

say! 2026. 6. 26. 13:47
728x90

 

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

A가 아닌 경우 > 조이스틱 위, 아래 이동도 해야함

+커서 좌우로 움직이기

>커서 오른쪽으로만 쭉 가는 경우 vs 오른쪽 갔다가 왼쪽으로 가는 경우 vs 왼쪽으로 갔다가 오른쪽으로 가는 경우 Math.min으로 최솟값 구하기

 

import java.util.*;

class Solution {
    public int solution(String name) {
        int answer = 0;
        
        int n = name.length();
        int move = n-1; // 커서 오른쪽으로만 쭉 가는 경우
        
        for(int i=0; i<name.length(); i++){
            char c = name.charAt(i);
            
            if(c != 'A'){
                // A 아닌 경우 > 위 아래 이동도 해야함
                int a = c - 'A';
                int z = 'Z' - c + 1;
                answer+= Math.min(a,z);
            }
            // 좌우 커서 이동
            // 좌/우 이동 최적화
            int next = i + 1;

            // i 다음부터 연속된 A 구간 찾기
            while (next < n && name.charAt(next) == 'A') {
                next++;
            }

            // 오른쪽으로 갔다가 다시 왼쪽으로 돌아가는 경우
            move = Math.min(move, i * 2 + (n - next));

            // 왼쪽으로 먼저 갔다가 오른쪽으로 돌아오는 경우
            move = Math.min(move, i + (n - next) * 2);
        }
        
        return answer + move;
    }
}