강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

정원조님의 프로필 이미지
정원조

작성한 질문수

[프로그래머스 탐욕법 Lv.2 조이스틱] 왜 안 되는지 정말 모르겠네요

작성

·

319

·

수정됨

0

다른 분들 알고리즘과 크게 다를 것이 없는데도 안 되는 이유를 모르겠네요;;;

  1. 알파벳 변경횟수 미리 구하고

  2. (왼쪽과 오른쪽 중 최소의 이동횟수) + (알파벳 변경 횟수)까지 더한 게 적은 쪽으로 이동시키는 건데

점수가 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로도 풀 수 있는 방법이 있을 수 있으니 여러 가지 방법 중 하나를 선택하여 풀이하면 됩니다.

더 자세한 해결 방법이 필요하시면 코드 전문을 함께 첨부해주시면 더욱 세부적인 도움을 드릴 수 있을 것 같습니다.
감사합니다.

정원조님의 프로필 이미지
정원조

작성한 질문수

질문하기