프로그래머스 - 조이스틱

-·2022년 9월 26일
0
class Solution {
    public int solution(String name) {
        int UD = 0;
        int length = name.length();

        int index; // 다음 값들을 확인할 때 사용
        int LR = length - 1; // 좌우 움직임 수를 체크

        for(int i = 0; i < name.length(); i++){
            char curChar = name.charAt(i);
            // 위아래 
            UD += getUpDown(curChar);
            index = i + 1;
            // 연속되는 A 갯수 확인
            while(index < length && name.charAt(index) == 'A'){
                index++;
            }
            // 순서대로 가는 것과, 뒤로 돌아가는 것 중 이동수가 적은 것을 선택
            // move -> 순서대로 가는거
            // i * 2 + length - index -> 뒤로 되돌아 가는거
            // 왜 i * 2 ?
            // 현재위치까지 왔다가 되돌아 가는경우 ex) i == 2 면 1 2 2 1
            // length - index ?
            // 뒤로 가는거 계산
            // 하지만 이 경우는 처음에 앞으로 갔다가 뒤로가는걸 상정
            int reverse = i * 2 + length - index; 
            if (LR > reverse) LR = reverse;
            // 처음부터 뒷부분을 먼저 입력하는 것이 더 빠른 경우
            int reverse2 = (length - index) * 2 + i;
            if (LR > reverse2) LR = reverse2;
        }
        return UD + LR;
    }

    public int getUpDown(char tmpChar) {
        // 문자는 코드번호로 이어져 있으니까 그냥 뺄셈하면 나옴
        char startChar = 'A';
        char endChar = 'Z';
        // 정방향
        int forward = tmpChar - startChar;
        // 역방향
        int reverse = endChar - tmpChar + 1;

        if (forward > reverse) return reverse;
        return forward;
    }
}

아 근데 이건 문제가 좀 ..

이건 머리가 안굴러가서 테스트케이스 이것저것 막 넣어서 했더니 안되는것도 있어서 대가리 겁나 굴렸는데

그냥 제출해보니까 통과되고 읭? 머지 싶었음

profile
거북이는 오늘도 걷는다

0개의 댓글