문제 설명

문제 링크

[프로그래머스[Level2] 조이스틱]
(https://school.programmers.co.kr/learn/courses/30/lessons/42860)

접근 방법

  1. ▲ ▼ 알파벳 최소 이동

    name[i]번째 value - 65('A'의 아스키 코드값) 으로 값을 구하기
    알파벳의 총 개수 : 26개 / 2 를 통해 13보다 큰 값은 'Z'로 시작하는게 더 최소임

  2. ◀ ▶ 커서 최소 이동

    해결되지 않아 구글링을 통해 직접 수기로 작성하며 이해함.

코드

function solution(name) {
    // 'A'~'Z' : 65~90
    let answer = 0;
    let answer = 0; 
    const nameLength = name.length;
    let move = nameLength - 1;
    let move = nameLength - 1; //오른쪽으로 모두 이동하였을 때의 count
    for(let i=0;i<nameLength;++i){
        let howManyClickButton = name.charCodeAt(i)-65;
        if(howManyClickButton>13) howManyClickButton = (26- howManyClickButton);
        // ▲ ▼ 부분

        //name.charCodeAt(i) => name의 i번째 인덱스의 아스키 코드값 - 65('A'의 아스키 코드값) 
        let howManyClickButton = name.charCodeAt(i)-65; 
        // 알파벳의 개수 26개, 반으로 나누어 13보다 큰 값이면 'Z'부터 count하는게 더 최소.
        if(howManyClickButton>13) howManyClickButton = (26- howManyClickButton); 
        answer+=howManyClickButton;

        // ◀ ▶ 부분
        let x = i+1;
        while(x<nameLength &&name[x]=='A') x++;

        move = Math.min(move,i+nameLength-x+Math.min(i,nameLength-x));
    }
    answer+=move;
    return answer;
}

+ Recent posts