728x90
반응형
function solution(babbling, available =["aya", "ye", "woo", "ma"]) {
// 재귀 return 값은, babbling이 가질 수 있는 정답의 수
let tempAnswer = 0;
babbling.forEach(item=>{
for(let i=0; i<available.length; i++){
const split = item.split(available[i]).filter(temp=> Boolean(temp));
if(split.join('').length < item.length - available[i].length) break;
// 유의사항 1.
// 같은 단어는 한번씩만 존재한다. 즉, 연속된 단어의 경우 split 해버리면 안됨.
// 몇 개 들었는지 알 수 없음.
if(split.length === 0) {
tempAnswer += 1; // item 분석 끝났으니 nextItem 으로 넘기기
break;
} else if(split.length === 1 && split[0] === item){ // 그대로이면, available[i++] 으로 넘기기
continue;
} else {
const newAvailable = available.slice(1);
const result = solution(split, newAvailable);
if(result === 0) continue;
else {
if (result === split.length) {
// 유의사항 2. 다른 재귀 문제와 달리 단어 한개가 쪼개졌으므로, result 를 다르게 해석해야함.
tempAnswer += 1;
}
break;
}
}
}
})
return tempAnswer;
}
입문 문제 풀다가 화딱지 났다. 하지만 오랜만에 한문제 풀어서 매-우 뿌듯하다.
다음 목표
1. 타인 풀이 보면서 더 간단한 방법 공부해보자.
2. 첫 아이디어였던, item.replace(available[i], '') 의 경우 새로운 단어가 생성될까봐 포기했는데, 다른 구분자를 넣어 많이들 간단하게 푸셨더라. 방법2로 추가 정리해보자.
반응형
'개발 지식 B+ > 코딩 테스트' 카테고리의 다른 글
프로그래머스 level2 배지 획득! (0) | 2021.01.10 |
---|---|
순열 - 재귀로 구현 (0) | 2020.12.12 |