[프로그래머스][조이스틱]-Lv.2

호준·2022년 11월 16일
0

Algorithm

목록 보기
100/111
post-thumbnail

🎈 문제

문제링크

🎈 제한사항

🎈 접근방법

  1. 해당 문자가 A로부터 오른쪽이 길지 왼쪽으로 길지 판단한다.
  2. 순서대로 가는 것과, 뒤로 돌아가는 것 비교 후 작은 쪽 선택
  3. 처음부터 뒷부분을 먼저 입력하는 것이 더 빠른 경우까지 고려한다.

🎈 코드

class Solution {
    public int solution(String name) {
        int answer = 0;
        int min = name.length()-1;
        for(int i=0; i<name.length(); i++){
            char ch = name.charAt(i);
            if(ch-'A' > 13){
                answer += ('Z' - ch + 1);
            }else{
                answer += ch-'A';
            }
            
            int next = i + 1;
            while(next < name.length() && name.charAt(next) == 'A'){
                next++;
            }
            // 순서대로 가는 것과, 뒤로 돌아가는 것 중 이동수가 적은 것을 선택 
            min = Math.min(min, i*2 + name.length() - next);
            // 처음부터 뒷부분을 먼저 입력하는 것이 더 빠른 경우까지 고려하려면 아래의 코드가 필요합니다.
            min = Math.min(min, i + (name.length() - next) * 2);
        }
        return answer+min;
    }
}
profile
도전하자

0개의 댓글