끄적끄적

[Programmers] 대충 만든 자판 (JS) 본문

Programmers

[Programmers] 대충 만든 자판 (JS)

2024. 1. 18. 02:51

 

문제를 보자마자 가장 먼저 떠오른 것은 'object' 구조로 만들어야 겠다! 였습니다.

하도 programmers에서 배열을 사용하면 런타임에러와 같은 index나 시간초과 에러들이 많이 발생해 가장 효율적인 구조를 찾는 것이 첫번째 생각이었습니다.

 

먼저 알파벳을 모두 객체의 key로 저장을 하고, 0으로 값을 넣어줍니다.

const alphaNum = {
        'A': 0,
        'B': 0,
        ...생략
        'Z': 0,
    }

 

그리고 먼저 입력값인 keymap 을 보고 스펠링을 읽어 각 스펠링이 몇번째에 위치하는지를 파악하고,

파악했을때 이미 해당 알파벳이 위치가 정해져있다면, index의 대소비교,  정해져있지 않다면 저장을 하였습니다.

for(let i=0; i<keymap.length; i++){
    let str = keymap[i];
    for(let k=0; k<str.length; k++){
        if(alphaNum[str[k]] === 0) alphaNum[str[k]] = k+1;
        else if(alphaNum[str[k]] > k+1) alphaNum[str[k]] = k+1;
    }
}

 

마지막으론 이제 결과물을 만들 차례입니다.

for(let i=0; i<targets.length; i++){
    let sum = 0;
    let str = targets[i];
    for(let k=0; k<str.length; k++){
        if(alphaNum[str[k]] === 0){
            sum = -1;
            break;
        } else sum += alphaNum[str[k]]
    }
    answer.push(sum !== 0 ? sum : -1);
}

 

 

// 전체 코드
function solution(keymap, targets) {
    var answer = [];
    const alphaNum = {
        'A': 0,
        'B': 0,
        'C': 0,
        'D': 0,
        'E': 0,
        'F': 0,
        'G': 0,
        'H': 0,
        'I': 0,
        'J': 0,
        'K': 0,
        'L': 0,
        'M': 0,
        'N': 0,
        'O': 0,
        'P': 0,
        'Q': 0,
        'R': 0,
        'S': 0,
        'T': 0,
        'U': 0,
        'W': 0,
        'V': 0,
        'X': 0,
        'Y': 0,
        'Z': 0,
    }
    
    for(let i=0; i<keymap.length; i++){
        let str = keymap[i];
        for(let k=0; k<str.length; k++){
            if(alphaNum[str[k]] === 0) alphaNum[str[k]] = k+1;
            else if(alphaNum[str[k]] > k+1) alphaNum[str[k]] = k+1;
        }
    }
    
    for(let i=0; i<targets.length; i++){
        let sum = 0;
        let str = targets[i];
        for(let k=0; k<str.length; k++){
            if(alphaNum[str[k]] === 0){
                sum = -1;
                break;
            } else sum += alphaNum[str[k]]
        }
        answer.push(sum !== 0 ? sum : -1);
    }
    return answer;
}

 

 

테스트케이스를 계속 시도하는 중 계속 틀렸다고 하여,,, 계속 고민해보았는데..

문제는 .알파벳을 다적질않았습니다.. 오랜만에 ABC송을 외워보니 중간에 빼먹더라구요....

 

 

 

 

Comments