
프로그래머스 120956 : 옹알이 - Javascript
문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling
이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
babbling
의 길이 ≤ 100 - 1 ≤
babbling[i]
의 길이 ≤ 15 babbling
의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.- 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
입출력 예
babbling | result |
---|---|
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
-
예제 #1
["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다 -
예제 #2
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.
유의사항
네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
풀이 과정
그냥 보이는 대로 발음 가능한 단어를 제거하는 방식을 사용하면 예제에 있는 "wyeoo"를 처리할 때 "ye"를 제거하고, 그 다음 "woo"를 제거해 발음이 가능하다고 처리하기 때문에 단어를 유지한 채로 모두 발음이 가능한지 확인해야합니다.
제가 생각한 해결 방법은 단어는 그대로 두고, 단어의 길이만 구해서 발음이 가능할 경우 길이를 줄여 길이가 0이 되면 발음이 가능한 단어라고 처리하는 것입니다. 문제 조건 중 모든 발음은 한번씩만 가능하다고 했기 때문에 여러번 포함되는 경우는 생각하지 않아도 됩니다.
//조카가 가능한 발음 목록
const pronunciations = ['aya', 'ye', 'woo', 'ma'];
function solution(babbling) {
let answer = 0;
for (const word of babbling) {
//남은 단어의 길이
let remain = word.length;
for (const pronunce of pronunciations) {
//가능한 발음이 포함되면 해당 발음의 길이만큼 남은 길이를 줄임
if (word.includes(pronunce)) {
remain -= pronunce.length;
}
}
//남은 길이가 없으면 발음 가능한 단어
if (remain === 0) {
answer++;
}
}
return answer;
}