-
프로그래머스 코딩 입문 문제.js - 외계어 사전프로그래머스 문제 풀기 2023. 11. 24. 14:22728x90
문제 설명
PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한 번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return 하도록 solution 함수를 완성해 주세요.
...
문제 요약
1. spell의 철자들이 dic 요소들 중 순서에 상관없이 전부 포함되어야 한다.
2. spell의 철자가 a, b, c라면 dic 요소 중 하나가 ‘abc’, ‘bca’, ‘cda’ 등 순서에 상관없이 다 들어가야 한다.
3. ‘abcd’ 이처럼 spell에 없는 요소인 d가 들어가 있는 건 인정하지 않는다.
작성한 답
function solution(spell, dic){ let check = dic.some((x)=> spell.every(i)=>x.includes(i))); if(check){ return 1 }else{ return 2 } }Or
function solution(spell, dic) { return dic.some((x)=> spell.every((i)=>x.includes(i))) ? 1 : 2 }상단 코드에서 if문 대신 삼항 연산자를 사용해서 한 줄 코드로 요약할 수 있었다.
some()과 every() 메서드로 spell 요소들이 dic 요소에 다 포함이 되면 true, 하나라도 포함되지 않으면 false가 나오게 했다.
그래서 true라면 1, false라면 2를 반환하는 코드이다.
위 코드에서 x는 dic의 요소, i는 spell의 요소가 된다.
⇒ dic의 요소에 spell의 요소들이 전부 포함되나요? 들어가면 true 아니라면 false 반환해 주세요.
여기서 some를 사용한 이유는 각각의 배열 요소들을 비교하기 위해서 사용했다. for 문이나 filter를 사용해 배열의 요소들을 불러와도 된다.
filter 사용하면
function solution(spell, dic){ dic.filter((x)=>spell.every((i)=>x.includes(i))).length ? 1 : 2; }이런 식으로 포함되어 있다면 1 아니면 2로 표현한다. 여기서 length 붙인 이유는 filter로 했을 때 true, false로 반환되지 않고 해당되는 요소들을 반환하기에 요소들이 있으면 배열의 길이는 0이 아닐 테니 1, 0이면 2를 반환하도록 한다. (0, null, undefined는 false로 인식)
(
이 답은 이미 있는 답안인데 볼 때마다 매번 어떻게 간단하게 작성했을까 감탄하게 된다.)for문 사용하면
function solution(spell, dic){ for(i=0;i<dic.length;i++){spell.every((e)=>dic[i].includes(e)) ? 1 : 2}; }filter와 비슷해 보이는데 정확하게 some()과 every() 메서드는 무엇일까?
some() 메서드는 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트한다. 만약 배열에서 주어진 함수가 true를 반환하면 true를 반환하고 그렇지 않다면 false를 반환한다. 이 메서드는 배열을 변경하지 않는다.
⇒ 주어진 조건을 만족시키는 요소가 최소 1개 이상 있는지를 확인할 때 사용한다. 그래서 반환값이 true일 때까지 확인한다. 마지막까지 true를 반환하지 않는다면 false를 반환한다. or과 비슷하다고 보면 된다.
every() 메서드는 배열의 모든 요소가 제공된 함수로 구현된 테스트를 통과하는지 테스트한다. 이 메서드는 boolean 값을 반환한다.
⇒ 모든 원소가 조건을 통과하는지 확인할 수 있다. 그래서 반환값이 false가 나오면 동작을 멈추고 false를 반환한다. and와 비슷하다고 보면 된다.
메서드에 대해 더 자세한 설명을 보고 싶다면 공식 사이트에서 확인하면 좋을 것 같다.
반응형'프로그래머스 문제 풀기' 카테고리의 다른 글
숨어있는 숫자의 덧셈(2) - 프로그래머스 문제 (0) 2023.03.27 프로그래머스 문제 풀기 - 모스부호(1) (0) 2023.03.22 코딩테스트 연습 - 편지 (0) 2022.12.30 코딩 테스트 연습 - 아이스 아메리카노 (0) 2022.12.28 코딩테스트 연습 - 피자나눠먹기3 (0) 2022.12.28