-
프로그래머스 - 옹알이 (1)프론트엔드/프로그래머스 2024. 1. 31. 14:05728x90
문제
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
정답
function solution(babbling) { let a = ["aya", "ye", "woo", "ma"] let answer = []; for(let i = 0; i < babbling.length; i++){ for(let l = 0; l < a.length; l++){ if(babbling[i] === a[l]){ answer.push(babbling[i]); } else { for(let k = 0; k < a.length; k++){ if(a[l] !== a[k]) { if(babbling[i] === a[l] + a[k]){ answer.push(babbling[i]); } else { for(let j = 0; j < a.length; j++){ if(a[l] !== a[k] !== a[j]) { if(babbling[i] === a[l] + a[k] + a[j]){ answer.push(babbling[i]); } else { for(let p = 0; p < a.length; p++){ if(a[l] !== a[k] !== a[p]){ if(babbling[i] === a[l] + a[k] + a[j] + a[p]){ answer.push(babbling[i]); } } } } } } } } } } } } return answer.length; }
- (for(let i = 0; i < babbling.length; i++)) : babbling 배열을 순회합니다.
- (for(let l = 0; l < a.length; l++)) : a 배열을 순회하며 첫 번째 단어를 선택합니다.
- (for(let k = 0; k < a.length; k++)) : 두 번째 단어를 선택하며, 중복을 피하기 위해 a[l] !== a[k] 조건을 사용합니다.
- (for(let j = 0; j < a.length; j++)) : 세 번째 단어를 선택하며, 중복을 피하기 위해 a[l] !== a[k] !== a[j]와 같이 조건을 사용합니다.
- (for(let p = 0; p < a.length; p++)) : 중복을 피하기 위해 a[l] !== a[k] !== a[j] !== a[p]와 같이 조건을 사용합니다.각 조합에 대해 babbling[i]와 일치하는 경우, answer 배열에 추가합니다.
코드 최적화
function solution(babbling) { const wordSet = new Set(["aya", "ye", "woo", "ma"]) let result = 0; for(const word of babbling) { let remainWord = ''; let prevWord = ''; for(const char of word) { remainWord += char; if(wordSet.has(remainWord)) { if(remainWord === prevWord) break; prevWord = remainWord remainWord = '' } } if(remainWord === '') result++ } return result; }
- wordSet : 가능한 발음을 저장하는 Set을 생성합니다.
- result : 조합된 발음의 개수를 저장할 변수를 초기화합니다.
- 외부 for...of 루프 : babbling 배열을 순회합니다.
- 내부 for...of 루프 : 각 단어에 대해 문자를 하나씩 확인합니다.
- remainWord : 현재까지 확인된 부분 문자열을 저장하는 변수로, 문자를 하나씩 추가하여 발음 조합을 만들어냅니다.
- prevWord : 이전에 확인된 부분 문자열을 저장하는 변수로, 현재까지의 부분 문자열이 중복되는지 확인하기 위해 사용합니다.
- wordSet.has(remainWord) : 현재까지의 부분 문자열이 가능한 발음으로 조합된 경우를 확인합니다.
- if(remainWord === prevWord) break : 현재까지의 부분 문자열이 이전에 확인된 부분과 중복된 경우 반복문을 종료합니다.
- prevWord = remainWord : 현재까지의 부분 문자열을 prevWord에 저장하고, 중복을 방지하기 위해 remainWord를 초기화합니다.
- if(remainWord === '') result++ : 현재까지의 부분 문자열이 가능한 발음으로 조합된 경우, result를 증가시킵니다.
728x90'프론트엔드 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 삼각형의 완성조건 (1) (0) 2024.02.05 프로그래머스 - 배열의 유사도 (0) 2024.02.03 프로그래머스 - 중앙값 구하기 (1) 2024.01.31 프로그래머스 - 특정 문자 제거하기 (0) 2024.01.31 프로그래머스 - 순서쌍의 개수 (0) 2024.01.31