본문 바로가기

algorithm/프로그래머스

프로그래머스_조이스틱(JAVA)

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 풀이]

그리디를 이용하여 문제를 풀었습니다.

 

조이스틱 문제는 목표한 글자를 네 방향으로 조이스틱으로 움직여서 만들 수 있는 최소 조작 횟수를 구하는 문제입니다. 아래 위로 움직이는 횟수와 옆으로 움직이는 횟수를 나누어 계산한 후 더해주는 방법으로 해결하였습니다. 

 

구현방법은 아래와 같습니다.

  1. 옆으로 움직이는 최대 횟수를 지정합니다.
  2. 배열을 순회하면서 위/아래 중 적게 움직이는 횟수를 구합니다.
  3. 현재 원소 다음 원소 중 A가 아닌 것을 찾습니다.
  4. 오른쪽/왼쪽 중 적게 가는 수를 찾아 업데이트합니다.

[JAVA]

class Solution {
    public int solution(String name) {
        int answer = 0;
        int length = name.length();

        int index;
        int move = length - 1;

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

            index = i + 1;
            
            while(index < length && name.charAt(index) == 'A'){
                index++;
            }
            
            move = Math.min(move, i * 2 + length - index);
            move = Math.min(move, (length - index) * 2 + i);
        }
        return answer + move;
    }
}