작성
·
319
·
수정됨
0
다른 분들 알고리즘과 크게 다를 것이 없는데도 안 되는 이유를 모르겠네요;;;
알파벳 변경횟수 미리 구하고
(왼쪽과 오른쪽 중 최소의 이동횟수) + (알파벳 변경 횟수)까지 더한 게 적은 쪽으로 이동시키는 건데
점수가 55점이 나오는 거는 도통 이해가 안 되네요;;;
아니면 dfs로 풀면 된다고도 하는데 그럼 Greedy 문제가 아니지 않나요???
function solution(name) {
// 알파벳과 A사이의 거리 모두 재기
let array = [];
for(let i=0; i<name.length; i++) {
array.push(Math.min( name.charCodeAt(i) - 65, 91 - name.charCodeAt(i) ));
}
let here = 0, left = name.length-1, right = 1;
// 왼쪽과 오른쪽 알파벳이 A라면 아닐때까지 이동
while(array[right] === 0) right++;
while(array[left] === 0) left--;
let answer = array[here];
while(left >= right) {
// 왼쪽과 오른쪽 알파벳이 A라면 아닐때까지 이동
while(array[right] === 0) right++;
while(array[left] === 0) left--;
// 왼쪽 알파벳 오른쪽 알파벳 중
// 도달값 + 거리값이 작은 쪽으로 이동
// 도달값은 오른쪽 방향 거리와 왼쪽 방향 거리 중 짧은 곳으로 정함
let r = Math.min(Math.abs(right - here), array.length - Math.abs(right - here)) + array[right];
let l = Math.min(Math.abs(left - here), array.length - Math.abs(left - here)) + array[left];
if(r <= l) {
let tmp = right;
right++;
here = tmp;
answer += r;
} else {
let tmp = left;
left--;
here = tmp;
answer += l;
}
}
return answer;
}
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
조이스틱 문제를 풀면서 알고리즘을 구현하신 것 같네요.
하지만 코드를 봐서는 구체적인 문제 해결 방법을 제안하기는 어려울 것 같습니다.
55점이 나와서 이해가 안 된다는데, 해당 부분이 어디인지 조금 더 자세히 설명해주시면 도움이 될 것 같습니다.
또한 dfs로도 풀 수 있다는 것을 들었다고 하시는데, 그것도 가능한 방법 중 하나입니다.
Greedy로도 풀 수 있는 방법이 있고, dfs로도 풀 수 있는 방법이 있을 수 있으니 여러 가지 방법 중 하나를 선택하여 풀이하면 됩니다.
더 자세한 해결 방법이 필요하시면 코드 전문을 함께 첨부해주시면 더욱 세부적인 도움을 드릴 수 있을 것 같습니다.
감사합니다.