프로그래머스 - 조이스틱

오늘도 코딩중!·2023년 9월 6일
0

프로그래머스

목록 보기
7/7

문제

제한사항

분석

만들고자 하는 이름이 매개변수로 주어질 때 조이스틱 조작 횟수의 최솟값을 찾는 형식이다.

  • 필요사항1 : 조이스틱 위 아래 방향 결정.

    알파벳을 아스키코드 값으로 변경하여 값이 Z에 가까운지 A에 가까운지 비교한 후, Z에 가까운 경우를 탐지하여 조이스틱의 방향을 결정.

  • 필요사항2 : 조이스틱 왼쪽 오른쪽 방향 결정(여기가 중요)

    커서 위치가 바뀌게 되는 경우는 총 세 가지.

  • 처음부터 쭉 오른쪽으로 가는 경우
  • 오른쪽으로 갔다 다시 돌아와 왼쪽으로 가는 경우
  • 왼쪽으로 갔다 다시 턴하여 오른쪽으로 가는 경우

여기서 중요한 점은 왼쪽 오른쪽으로 이동한 수를 지속적으로 갱신해서 연속된 A가 발생했을 시 유턴을 하는 것이 옳은 지, 지속적으로 나아갈지 인식하는 것이 중요한 포인트이다.

코드 분석

import java.util.Arrays;
class Solution {
    public int solution(String name) {
        int answer = 0;
        int move = name.length() - 1; // 오른쪽으로 쭉 간 횟수
        
        for(int i = 0; i < name.length(); i++) {
            answer += Math.min(name.charAt(i) - 'A', 26 - (name.charAt(i) - 'A')); //상,하 알파벳 맞추기
            if (i < name.length() - 1 && name.charAt(i + 1) == 'A') {//다음 문자가 A일경우
                int endA = i + 1;
                while(endA < name.length() && name.charAt(endA) == 'A')
                    endA++;
                move = Math.min(move, i * 2 + (name.length() - endA));// 오른쪽으로 갔다 다시 왼쪽으로 꺾기 일때 수
                move = Math.min(move, i + (name.length() - endA) * 2);// 왼쪽으로 갔다 다시 오른쪽으로 꺾기 일때 수
            }
        }
        return answer + move;
    }
}```
profile
늦은만큼 코막고 달려!

0개의 댓글