오늘은 여기까지

[프로그래머스] 조이스틱 - Java 자바 본문

Problem Solving

[프로그래머스] 조이스틱 - Java 자바

dev-99 2024. 11. 15. 21:05

https://school.programmers.co.kr/learn/courses/30/lessons/42860

 

프로그래머스

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

programmers.co.kr

 

개념: 그리디

 

 

1. 조이스틱 상하 (알파벳 변경)

  • A에서 char로 변경하는게 빠른지, Z에서 char로 변경하는게 빠른지 구한다. char는 현재 포인터로 가르키고 있는 알파벳.
    • `Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1)`

 

 

2. 조이스틱 좌우 (알파벳 간 이동)

  • 처음 시작에서 i번째 알파벳까지 이동하다가, i+1번째부터 A가 나오면, 뒤로 이동하는 경우
    • `Math.min(move, i * 2 + length - next)`
  • 처음 시작부터 뒤로 이동하다가, A가 나오면 다시 앞으로 이동하는 경우
    • `Math.min(move, (length - next) * 2 + i)`

 

 

 

전체코드

class Solution {
    public int solution(String name) {
        int answer = 0;
        int length = name.length();
        int move = length - 1;
        for (int i = 0; i < length; i++) {
            char c = name.charAt(i);
            answer += Math.min(c - 'A', 'Z' - c + 1);
            int next = i + 1;
            while (next < length && name.charAt(next) == 'A') {
                next++;
            }
            move = Math.min(move, i * 2 + length - next); // 처음에서 i번째까지 이동하고, 뒤로 이동하는 경우
            move = Math.min(move, (length - next) * 2 + i); // 처음부터 뒤로 이동하고, 다시 앞으로 오는 경우
        }
        return answer + move;
    }
}