본문 바로가기

프로그래머스 - JAVA

코딩테스트 연습 > 탐욕법(Greedy) > 조이스틱

기존 코드 (실패)

import java.util.*;

class Solution {
    public int solution(String name) {
                int answer = 0;
        
        int len = name.length();
        
        //최대로 가질 수 있는 min값은 끝까지 가는것
        int min_move = len-1;
        
        for(int i=0; i<len; i++) {
        	answer += Math.min(name.charAt(i)-'A', 'Z'-name.charAt(i)+1);
        	
        	//좌우: 연속된 A의 등장에 따라 최소 움직임이 달라진다
        	int next = i+1;// 현재 다음 위치부터
        	//내 다음이 A라면 계속 NEXT++
        	while(next<len && name.charAt(next) == 'A')
        		next++;
        	
        	min_move = Math.min(min_move, i+len-next + i);
        }//for
        
        answer += min_move;
        
        return answer;
    }
}

최근 코드

class Solution {
    public int solution(String name) {
        int answer = 0;
        int horMove = name.length() - 1;
        
        for (int i = 0 ; i < name.length() ; i++){
            char c = name.charAt(i);
            answer += (c - 'A' < 'Z' - c + 1) ? c - 'A' : 'Z' - c + 1;
            
            int nextIndex = i + 1;
            while(nextIndex < name.length() && name.charAt(nextIndex) == 'A')
                nextIndex ++;
            horMove = Math.min(horMove, i * 2 + name.length() - nextIndex);
            
        }
        return answer + horMove;
    }
}