만들고자 하는 이름 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;
}
탐욕버어어업,,, 은 아닌 것 같은뎁
이 방법 말고는 생각이 안 났다.