<문제 설명>
머쓱이는 태어난 지 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 |
<문제 풀이>
function solution(babbling) {
var answer = 0;
let patterns = ["aya", "ye", "woo", "ma"]
patterns.forEach(pattern=>{
babbling = babbling.map(str =>{
if(str === pattern){
return '1'
}else if(str.includes(pattern)){
return str.replace(new RegExp(pattern, 'g'), '1');
}else return str
})
})
let one = ['1']
one.forEach(patt=>{
babbling = babbling.map(Str =>{
if(Str === patt){
return ''
}else if(Str.includes(patt)){
return Str.replace(new RegExp(patt, 'g'), '');
}
})
})
babbling.forEach(blank =>{
if(blank === ''){
answer++
}
})
return answer
}
많이 복잡하게 푼 문제다.
요약하면, "aya", "ye", "woo", "ma"를 pattern이라는 변수로 선언,
처음에는 pattern에 속한 단어를 ''로 바꿔서 해당 요소가 ''만 있을 경우 카운트하려 했다.
그런데, 예시처럼 wyeoo의 경우, 중간에 ye가 있고,
woo가 갈라져있어서 woo로 볼 수 없는데,
wyeoo까지 다 ''로 바꿔버리는 문제가 생겼다.
그래서 어차피 테스트케이스는 숫자가 없으므로,
pattern에 있는 글자가 나오면 다 1로 바꿔주도록 했다.
그렇게하면 wyeoo는 w1oo가 되므로
pattern에 속한 단어만 있지 않아 추후 카운트되지 않는다.
그리고, 1을 다시 빈 칸으로 바꿔주었다.
이후 forEach로 돌며 요소가 ''일 경우 answer에 1을 누적해서
pattern만 있는 요소의 누적값을 구했다.
<다른 풀이>
function solution(babbling) {
var answer = 0;
const regex = /^(aya|ye|woo|ma)+$/;
babbling.forEach(word => {
if (regex.test(word)) answer++;
})
return answer;
}
나도 RegExp를 쓰게 된 경위가 pattern을 바로 ''로 바꾸려고 하다가
잘 안되어서 정규식 대신 메소드로 쓰게 된 것인데,
내가 구현하려던 저 복잡한 것들이 여기 간단하게 정리되어 있어서
참고하면 좋을 것 같다.
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JavaScript] n의 배수 (0) | 2023.04.23 |
---|---|
[프로그래머스 | JavaScript] 문자열 내림차순으로 배치하기 (0) | 2023.04.19 |
[프로그래머스 | JavaScript] 등수 매기기 (0) | 2023.04.15 |
[프로그래머스 | JavaScript] 겹치는 선분의 길이 (0) | 2023.04.14 |
[프로그래머스 | JavaScript] 평행 (0) | 2023.04.13 |