[프로그래머스] Lv.0 외계어 사전 JavaScript

Janet·2023년 4월 18일
0

Algorithm

목록 보기
147/314

문제 설명

PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.


제한사항

  • spell과 dic의 원소는 알파벳 소문자로만 이루어져있습니다.
  • 2 ≤ spell의 크기 ≤ 10
  • spell의 원소의 길이는 1입니다.
  • 1 ≤ dic의 크기 ≤ 10
  • 1 ≤ dic의 원소의 길이 ≤ 10
  • spell의 원소를 모두 사용해 단어를 만들어야 합니다.
  • spell의 원소를 모두 사용해 만들 수 있는 단어는 dic에 두 개 이상 존재하지 않습니다.
  • dic과 spell 모두 중복된 원소를 갖지 않습니다.

입출력 예

spelldicresult
["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

  • "p", "o", "s" 를 조합해 만들 수 있는 단어가 dic에 존재하지 않습니다. 따라서 2를 return합니다.

입출력 예 #2

  • "z", "d", "x" 를 조합해 만들 수 있는 단어 "dzx"가 dic에 존재합니다. 따라서 1을 return합니다.

입출력 예 #3

  • "s", "o", "m", "d" 를 조합해 만들 수 있는 단어가 dic에 존재하지 않습니다. 따라서 2을 return합니다.

유의사항

  • 입출력 예 #3 에서 "moos", "smm", "som"도 "s", "o", "m", "d" 를 조합해 만들 수 있지만 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;
}
profile
😸

0개의 댓글