프로그래머스 Level 2 - 조이스틱
📌 문제 설명
📌 생각한 풀이 방법
- 해당 문자의 자릿수만큼 계산을 하며 오른쪽으로 이동한다.
- A가 나오는 경우 연속적으로 나온 A의 갯수를 계산한다.
- 연속된 A의 숫자가 현재 index+1보다 큰 경우 차이를 빼서 반대로 돌아간 효과를 준다.
- 최종적으로 사용된 횟수를 반환한다.
📌 풀이
function solution(name) {
let answer = 0;
let arr = [0];
for (let i = 0; i < name.length; i++) {
if (name[i] === "A") {
if (i === 0) {
arr.push(calculateRepeatingA(name) - 1);
} else if (name[i - 1] !== "A") {
arr.push(calculateRepeatingA(name.slice(i)) - (i - 1));
}
answer++;
} else {
answer += calculateCount(name[i]) + 1;
}
}
return answer - Math.max(...arr) - 1;
}
function calculateCount(value) {
return value.charCodeAt() - 65 < 91 - value.charCodeAt()
? value.charCodeAt() - 65
: 91 - value.charCodeAt();
}
function calculateRepeatingA(name) {
let count = 0;
for (let i = 0; i < name.length; i++) {
if (name[i] !== "A") break;
count++;
}
return count;
}