본문 바로가기
CodingTest

탐욕법 조이스틱 자바

by KkingKkang 2025. 2. 25.
728x90
import java.util.*;

class Solution{

	public int solution(String name){
    
    	int answer = 0;
        int len = name.length();
        int move = len - 1; // 초기 값은 오른쪽으로 쭉 이동할 때의 값으로 잡음
        
        for(int i=0; i<len ; i++){
        
        	//초기 값 A부터 시작해서 name의 i번째 글자가 되기 위한 값 구하기
            //상하 이동 횟수 중 최솟값을 answer에 더해주기 
        	answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
            
            int nextA = i+1;
            
            //다음 문자가 A라면 반복문을 돌면서 A가 몇번 연속되는지 확인 
            while(nextA < len && name.charAt(nextA)=='A') {
            	nextA++;
            }
            
            //앞에 먼저 탐색 
            //1. i 만큼 갔다가 i 만큼 돌아오기 = 2*i 
            //2. A 모임의 끝부분~ 글자의 끝부분 = len - nextA;
            move = Math.min(move, 2*i + len - nextA);
            
            //뒤에 먼저 탐색
            //1. 글자의 끝부분에서 a모임의 끝부분까지 다녀오기 = (len - nextA) * 2
            //2. i 만큼 가기
            move = Math.min(move, 2*(len-nextA) + i);
            
        
        }
        
        return answer + move;
    
    }

}

 

 

name = bcaad 일 때

  i      
b c a a d

b -> c -> b -> d 순서로 갈 수 있고, 

b -> d -> b -> c 순서로 갈 수 있는것?

 

그림으로 그려가면서 계산하기! 

728x90

댓글