https://school.programmers.co.kr/learn/courses/30/lessons/120956?language=javascript
문제 설명
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 10
- 1 ≤ babbling[i]의 길이 ≤ 30
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
입출력 예
babbling | result |
["aya", "yee", "u", "maa"] | 1 |
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] | 2 |
입출력 예 설명
입출력 예 #1
- ["aya", "yee", "u", "maa"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
입출력 예 #2
- ["ayaye", "uuuma", "yeye", "yemawoo", "ayaayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye" + "ma" + "woo" = "yewoo"로 2개입니다. "yeye"는 같은 발음이 연속되므로 발음할 수 없습니다. 따라서 2를 return 합니다.
유의사항
- 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
나의 풀이
Lv.0이라 쉬운 마음으로 시작했는데 생각보다 푸는데 오랜 시간이 걸렸다.
Test case 중 1번이 통과가 안되서였다. 1번의 test case는 예를 들어 babbling이 "ayayewoomawooma" 일 때 1을 리턴해야 한다.
말할 수 있는 단어가 연속으로 붙어있지 않지만 사용했던 단어를 또 사용한 예제이다.
나의 문제점은 단어를 한 번씩만 확인을 해서 마지막에 "wooma"가 남아 0을 리턴했다.
이 문제를 해결하기 위해서 while loop을 사용하여 현재 babbling 단어의 길이가 0일 될 때까지 확인을 하게 하면서
babbling 단어의 길이가 0일 될 때 answer에 +1을 해주었다.
자세한 설명은 코드의 주석에 참고.
function solution(babbling) {
var answer = 0;
var words = ["aya", "ye", "woo", "ma"];
for (let i = 0; i < babbling.length; i++) {
let keepCheck ='';
while(babbling[i]!="") {
let find = false;
for (let j = 0; j < 4; j++) {
let existIndex = babbling[i].search(words[j]); // 매칭되는 단어의 index return
if (existIndex == 0 && words[j] != keepCheck) { //매칭되는 단어가 첫글자이고 전단어와 같지 않을때
let removeMatch = babbling[i].replace(words[j], ""); // 말한단어는 없애준다
babbling[i] = removeMatch;
keepCheck = words[j]; //현재단어를 저장한다. 단어의 남은 부분이 같은 단어를 연속으로 말하는지 체크하기 위함
find = true;
}
}
if (babbling[i]==""){ answer+=1; break;}
if (find == false){break;}
}
}
return answer;
}
다른 풀이
정규표현식을 활용하여 문제를 풀었다. 코드는 훨씬 간결하지만 효율적인 면에서는 떨어진다.
그래도 정규표현식을 잘 활용한 코드라 리뷰해보았다.
모든 가능한 단어에서 연속으로 반복된 단어에는 '어려워ㅎ'로 단어를 바꾸고
모든 가능한 단어에서 발음이 가능한 단어들은 모두 ''로 바꾸어주고
마지막에 배열중에 ''인 아이들만 가져와 그 길이(고로 말할 수 있는 단어)를 반환하였다.
function solution(babbling) {
const 가능한_발음_목록 = ["aya", "ye", "woo", "ma"]
return babbling.filter((e) => {
가능한_발음_목록.forEach((가능한_발음) => {
e = e.replace(new RegExp(가능한_발음 + 가능한_발음, 'gi'), '어려웡ㅎ')
e = e.replace(new RegExp(가능한_발음, 'gi'), '')
})
return e === ''
}).length;
}
'코딩 문제 > 프로그래머스 [ JavaScript ]' 카테고리의 다른 글
[ 프로그래머스 / JavaScript ] [ 2022 KAKAO TECH INTERNSHIP ] 성격 유형 검사하기 (0) | 2022.10.20 |
---|---|
[ 프로그래머스 / JavaScript ] 안전지대 (0) | 2022.10.19 |
[ 프로그래머스 / JavaScript ] [ 2021 KAKAO BLIND RECRUITMENT ] 신규 아이디 추천 (0) | 2022.10.14 |
[ 프로그래머스 / JavaScript ] [ 2019 카카오 개발자 겨울 인턴십 ] 크레인 인형뽑기 게임 (0) | 2022.10.12 |
[ 프로그래머스 / JavaScript ] [ 카카오 인턴 ] 키패드 누르기 (0) | 2022.10.11 |
댓글