본문 바로가기
알고리즘 & 자료구조/프로그래머스

조이스틱

by 신재권 2023. 3. 31.
package programmers;

public class 조이스틱 {

/*
   ▲ - 다음 알파벳
   ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
   ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
   ▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)
*/

   public static int solution(String name) {

      int answer = 0;
      int len = name.length();

      int idx;
      int move = len - 1;

      for (int i = 0; i < name.length(); i++) {
         answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
         idx = i + 1;

         //연속되는 A 갯수 확인
         while (idx < len && name.charAt(idx) == 'A') {
            idx++;
         }

         //순서대로 가기 vs 오른쪽으로 갓다가 A를 만나면 왼쪽으로 가기 vs 왼쪽으로 갓다가 A를 만나면 오른쪽으로 가기
         int rightAndLeft = i * 2 + len - idx;
         int leftAndRight = (len - idx) * 2 + i;
         move = Math.min(move, Math.min(rightAndLeft, leftAndRight));
      }

      return answer + move;
   }

   public static void main(String[] args) {
      System.out.println(solution("JAZ") == 11);
      System.out.println(solution("BAAAAABB") == 5);
      System.out.println(solution("BABB") == 5);
      System.out.println(solution("JEROEN") == 56);
      System.out.println(solution("JAN") == 23);
   }
}

'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글

우박수열 정적분  (0) 2023.04.04
미로 탈출  (0) 2023.04.03
시소 짝꿍  (0) 2023.03.30
N Queen  (0) 2023.03.29
테이블 해시 함수  (0) 2023.03.28