programmers

[Programmers Level 0] 외계어사전 Javascript

냠냠맨 2022. 11. 30. 22:17

 

문제정보

 

 

문자열로 이루어진 배열 두개가 주어집니다.

리트코드에서 비슷한 유형의 문제를 풀었던 기억이 있어서 그걸 토대로 풀어봤습니다

leetcode 500 keyboard row라는 문제랑 굉장히 흡사하네요!!

 

 forEach를 이용해서 dic의 각 요소들을 split해주고 

spell의 단어들을 모두 가지고 있는 단어들을 찾아서 answer 배열에 넣어준 다음

answer 배열의 길이가 0이 아니라면 1을 0이라면 2를 반환하게하면 될 것 같습니다

 


 

나의풀이

 

function solution(spell, dic) {
    let answer = [] //정답을 저장해줄 배열
    dic.forEach(ele => { 
        let spliter = [...new Set(ele)] // 각요소를 set으로 만들어 중복을 없애고 스프레드연산자로 배열화합니다.
        if(spell.every(j => spliter.includes(j))) answer.push(ele) // 만약 spell의 모든 요소를 spliter가 가지고있다면 answer에 push
    })
    return !answer.length ? 2 : 1
}

 

every는 검사하는 모든 요소가 true일때 true를 반환하는 녀석이니까

만약 spell의 모든 요소를 spliter가 가지고있다면 every가 true를 반환하면서

answer 배열에 ele를 push해줍니다

 

근데 생각해보니까 중복 없애는 거 굳이 안해도 되겠네요 어차피 spell을 기준으로 비교하니까

function solution(spell, dic) {
    let answer = []
    dic.forEach(ele => {
        let spliter = ele.split('')
        if(spell.every(j => spliter.includes(j))) answer.push(ele)
    })
    return !answer.length ? 2 : 1
}

 

 

요렇게 짜도 문제없이 작동합니다.

항상 대충 구현한다음에 블로그에 글쓰면서 곰곰히 생각해보면 아..이거 안해도되는구나.. 

를 반복하는 기분이네요

 

 


 

다른사람의 풀이

 

function solution(spell, dic) {
    return dic.filter(v=>spell.every(c=>v.includes(c))).length ? 1 : 2;
}

 

굳이 저처럼 안풀고 filter에 모든걸 때려박아서 푸는 방법도 있네요.. ㅎㅎ;;

 

반응형