function solution(name) {
var answer = 0;
var changeCnt = 0;
let moveCnt = name.length - 1; // max 값은 name길이 -1
for (var i = 0; i < name.length; i++) {
let asciiValue = name.charCodeAt(i); // A 65 Z 90
if (asciiValue < 78) {
changeCnt += (asciiValue - 65); // A -> B 방향으로 변경하는 게 빠른 경우 // B일 경우 1
} else {
changeCnt += (91 - asciiValue); // Z일 경우 1이 나와야 함
}
let nextIndex = i + 1; // 다음 문자 확인을 위한 인덱스
while (nextIndex < name.length && name.charCodeAt(nextIndex) == 65) { // nextIndex는 name.length - 1보다 크지 않을 때까지 연속해서 A가 나오는지 확인이 필요하다.
nextIndex += 1;
}
// nextIndex는 A 다음의 문자 인덱스를 가리키게 된다.
moveCnt = Math.min(moveCnt, (i * 2) + name.length - nextIndex); // 이동 거리 최소 카운트로 갱신
}
answer = moveCnt + changeCnt;
return answer;
}
alert(solution("JEROEN")); // 56
/* <var>
변수 중복 선언 가능하여, 예기치 못한 값을 반환할 수 있다.
함수 레벨 스코프로 인해 함수 외부에서 선언한 변수는 모두 전역 변수로 된다.
변수 선언문 이전에 변수를 참조하면 언제나 undefined를 반환한다. */
/* <let>
let 키워드로는 변수 중복 선언이 불가하지만, 재할당은 가능하다. */
/* <const>
const가 let과 다른 점이 있다면, 반드시 선언과 초기화를 동시에 진행되어야 한다. */
프로그래머스 조이스틱 문제 풀이 JavaScript