📰 Coding Test 에서 익히는 javscript 기능과 기술 등
알고리즘 ( 해시 )
전화번호부에 적힌 전화번호를 담은 배열
phone_book 매개변수로 주어질 때,
어떤 번호가 다른 번호의 접두어인
경우가 있으면 false 를 그렇지 않으면 true 를 return
입력값: ["119", "97674223", "1195524421"]
["123", "456", "789"]
["12", "123", "1235", "567", "88"]
function solution(phoneBook) {
return !phoneBook.sort().some((t, i) => {
if (i === phoneBook.length - 1) return false;
return phoneBook[i+1].startsWith(phoneBook[i]);
})
}
* .sort() : 각 숫자의 크기가 아닌,
문자열로서의 사전식 정렬 순서에 따른 것
=> 사전식 정렬이기 때문에 접두사와 같이
사전순이며 동일한 문자열을 접두사처럼
가진 경우, 길이 짧은 문자열이 선 정렬
* !(...).some() : 하나라도 조건이 만족하면 true 아니면 false
=> 하지만 문제는 논리가 반대이기 때문에
=> ! 를 앞에 적용
* i === phoneBook.length - 1 : 마지막을 접두사로 확인할 필요
없기 때문에 해당 조건 작성
* phoneBook[i+1].startsWith(phoneBook[i]);
: 사전순으로 정렬된 phoneBook 이기 때문에
접두사를 startsWith 를 통해 확인
각 종류별로 최대 1가지 의상만 착용
서로 다른 방법으로 옷을 착용한 것으로 계산
하루에 최소 한 개의 의상
가진 의상들이 담긴 2차원 배열 clothes가 주어질 때
서로 다른 옷의 조합의 수를 return
입력값: [["yellow_hat", "headgear"],
["blue_sunglasses", "eyewear"],
["green_turban", "headgear"]]
[["crow_mask", "face"],
["blue_sunglasses", "face"],
["smoky_makeup", "face"]]
function solution(clothes) {
return Object.values(clothes.reduce((acc, cur) => {
acc[cur[1]] = acc[cur[1]] ? acc[cur[1]] + 1 : 1;
}, {})).reduce((a, b) => a * (b+1), 1) -1;
}
* Object.values : 객체의 값 목록을 배열로 전환
=> 경우의 수를 구하기 위해 전환
* clothes.reduce : 배열의 누적 계산
=> 종류별로 개수를 담은 객체 반환
* acc[cur[1]] = acc[cur[1]] ? acc[cur[1]] + 1 : 1
: cur[1] 은 key 이며 삼항연산자로 해당 key 의
값이 존재하면 1 아니면 누적 + 1 계산
* reduce((a * (b+1), 1) -1 : 누적으로 조합 계산 공식