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;
}