PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
spell과 dic의 원소는 알파벳 소문자로만 이루어져있습니다.spell의 크기 ≤ 10spell의 원소의 길이는 1입니다.dic의 크기 ≤ 10dic의 원소의 길이 ≤ 10spell의 원소를 모두 사용해 단어를 만들어야 합니다.spell의 원소를 모두 사용해 만들 수 있는 단어는 dic에 두 개 이상 존재하지 않습니다.dic과 spell 모두 중복된 원소를 갖지 않습니다.| spell | dic | result |
|---|---|---|
| ["p", "o", "s"] | ["sod", "eocd", "qixm", "adio", "soo"] | 2 |
| ["z", "d", "x"] | ["def", "dww", "dzx", "loveaw"] | 1 |
| ["s", "o", "m", "d"] | ["moos", "dzx", "smm", "sunmmo", "som"] | 2 |
입출력 예 #1
dic에 존재하지 않습니다. 따라서 2를 return합니다.입출력 예 #2
dic에 존재합니다. 따라서 1을 return합니다.입출력 예 #3
dic에 존재하지 않습니다. 따라서 2을 return합니다.spell의 원소를 모두 사용해야 하기 때문에 정답이 아닙니다.💡 문제풀이 과정
spell배열에 담긴 알파벳과dic배열에 담긴 단어들을sort()를 이용하여 정렬하면 일치하는 것이 있는지 쉽게 찾을 수 있다.- 답안 1번:
spell.sort().join(””);하여 하나의 단어로 만들고,dic배열은map()함수를 통해 각각의 원소들을split(””)하고 마찬가지로sort().join(””)하면 알파벳 순으로 단어들이 재정렬 및 조합된 형태로 만들어진다. 마지막으로filter()를 이용하여 일치하는 단어가 있는지 필터링하여 반환하는데 반환 값의length가 있다면 1을 반환, 없다면 2를 반환한다.
let spell = ["f", "b", "a"]; console.log(spell.sort().join("")); // abf
- 답안 2번: 다른 사람의 풀이로 1번 답안과 방식은 비슷하나
some()메소드를 이용하였다.spell.sort().toString()은spell.sort().join()과 같다. 아래 예제 참고 ⬇️
let spell = ["f", "b", "a"]; console.log(spell.sort().toString()); // a,b,f console.log(spell.sort().join()); // a,b,f
- cf.
some()메서드는 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트합니다. 만약 배열에서 주어진 함수가true을 반환하면true를 반환합니다. 그렇지 않으면false를 반환합니다. 이 메서드는 배열을 변경하지 않습니다. (출처: MDN)
✅ 답안 #1
function solution(spell, dic) {
const word = spell.sort().join("");
const dicArr = dic.map((v) => v.split("").sort().join(""));
return dicArr.filter((v) => word == v).length ? 1 : 2;
}
✅ 답안 #2
function solution(spell, dic) {
return dic.some((s) => spell.sort().toString() == [...s].sort().toString())
? 1
: 2;
}