언젠가는 펼쳐 볼 아카이브

[Programmers] 대충 만든 자판 본문

IT/Programmers

[Programmers] 대충 만든 자판

개발자희망생고롸파덕 2024. 2. 28. 15:05

사용언어 : javascript

lv.1

 

#문제

출처 : 프로그래머스

#제출코드

function solution(keymap, targets) {
    let answer = [];
    let map = new Map();

    keymap.map(item=> {
        const list = item.split('');
        list.map((k, i) => {
            if(!map.has(k) || (map.has(k) && (i+1) <= map.get(k))){
                map.set(k, (i+1))
            }
        })
    })

    targets.map(item => {
        const tmp = item.split('');
        let count = 0;

        for(let i=0; i<tmp.length; i++){
            if(!map.has(tmp[i])){
                count = -1;
                break;
            }
            count += map.get(tmp[i])
        }
        answer.push(count)
    })

    return answer;
}

 

map 함수를 이용해 최소 입력 수를 넣어주고 계산하는 방향으로 코드를 짰다. 좀 더 짧게 짤 수 있을것 같았는데.. 우선 빠르게 푸는걸 목표로 하고, 제출한 후에 다른 분들이 작성하신 코드를 보니, reduce를 사용해서 코드 길이를 확 줄인걸 볼 수 있었다...! (왜 이걸 생각 못했지)

reduce.. 자주 잊지 말고 다음엔 활용해봐야겠다.

 

#다른사람풀이

function solution(keymap, targets) {
    const answer = [];
    const map = {}
    for (const items of keymap) {
        items.split('').map((item, index) => map[item] = (map[item] < index+1 ? map[item] : index+1))
    }
    for (const items of targets) {
        answer.push(items.split('').reduce((cur, item) => cur += map[item], 0) || -1)
    }
    return answer;
}