[프로그래머스] 코딩테스트 연습 - 40

krkorklo·2022년 2월 8일
0

프로그래머스

목록 보기
40/78

level 2 - 조이스틱

만들고자 하는 이름 name이 매개변수로 주어질 때, 이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록 solution 함수를 만드세요.
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)

입출력 예시
name : "JEROEN"
-> 56

function solution(name) {
    var answer = name.length * 26;
    var str = 'A'.repeat(name.length);
    
    dfs(0, str, 0, 0);
    function dfs(idx, str, move, sum) {
        if (str == name) {
            answer = (answer < sum + move ? answer : sum + move);
            return;
        }
        if (move >= name.length) {
            return;
        }
        idx = (idx < 0 ? str.length - 1 : idx == str.length ? 0 : idx);
        var len = (name[idx].charCodeAt(0) - str[idx].charCodeAt(0) < 91 - name[idx].charCodeAt(0) ? name[idx].charCodeAt(0) - str[idx].charCodeAt(0) : 91 - name[idx].charCodeAt(0));
        str = str.slice(0, idx) + name[idx] + str.slice(idx + 1, str.length);
        dfs(idx - 1, str, move + 1, sum + len);
        dfs(idx + 1, str, move + 1, sum + len);
    }
    
    return answer > 1 ? answer - 1 : answer;
}

탐욕버어어업,,, 은 아닌 것 같은뎁
이 방법 말고는 생각이 안 났다.

0개의 댓글