[프로그래머스 | Javascript] 코딩테스트 입문 - 외계어 사전

박기영·2022년 11월 15일
0

프로그래머스

목록 보기
95/126

solution

function solution(spell, dic) {
    const isThere = [];
    
    dic.forEach((word) => {
        let count = 0;
        
        spell.forEach((item) => {
            if(word.includes(item)){
                count += 1;
            }
        })
        
        if(count === spell.length){
            isThere.push(word);
        }
    })
    
    return isThere.length === 0 ? 2 : 1;
}

dic 배열의 원소 하나에 대하여 spell을 검사한다.
만약, spell의 원소가 포함되어 있다면 count를 증가시킨다.
하나의 dic 배열 원소에 대한 연산이 끝날 때, countspell 배열의 길이와 같다면
spell 내의 모든 원소가 존재한다는 것이므로, isThere이라는 배열에 해당 dic 원소를 넣는다.
이런 단어가 하나라도 존재하면 1을 return하므로 isTherelength의 따라 return을 바꾼다.

다른 분 풀이

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

filter()every()를 활용하셨다.

every()는 배열이 주어진 조건을 모두 통과하는지를 판단하여 boolean 값을 반환한다.
따라서, spell에 있는 모든 원소가 dic의 배열 원소 하나에 포함돼야 true를 반환한다.

이어서 filter()는 참인 것만 판별하여 남겨놓기 때문에,
every() 연산에서 true가 반환된 dic만 남기고 나머지는 제거한다.
이렇게 생성된 배열의 길이가 0이라면, 문제 조건과 일치하는 문자가 없으므로 2를 return하고
배열의 길이가 1 이상이라면, 문제 조건과 일치하는 것이 있으므로 1을 return한다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글