https://school.programmers.co.kr/learn/courses/30/lessons/133499
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
머쓱이의 조카가 발음할 수 있는 단어의 개수를 구하라 - 주어진 자료는 무엇인가?
babbling: 조카가 발음할 수 있는 단어를 담은 배열 ('aya', 'ye', woo', 'ma') - 조건은 무엇인가?
문자열은 소문자로만 이루어져 있다.
2. 계획
- 연속되는 발음을 담은 변수를 생성한다.
- babbling을 순회한다.
- 연속되는 발음은 카운트하지 않고 지나간다.
- 단어에서 가능한 발음을 공백으로 바꾼다.
- 모두 발음 가능한 단어면 count++을 해준다.
3. 실행
const speak = ['ayaaya', 'yeye', 'woowoo', 'mama'];
const solution = (babbling) => {
let count = 0;
while (babbling.length) {
let word = babbling.shift();
//연속되는 발음은 카운트 안하고 지나감
if (speak.some((it) => word.includes(it))) continue;
//단어에서 가능한 발음을 공백으로 바꾼다.
word = word.replace(/(aya|ye|woo|ma)/g, '');
//모두 발음 가능한 단어면 count++
if (word.length === 0) count++
}
return count
};
test('solution', () => {
expect(solution(["aya", "yee", "u", "maa"])).toEqual(1);
expect(solution(["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"])).toEqual(2);
expect(solution(['woowo'])).toEqual(0);
expect(solution(['woayao'])).toEqual(0);
expect(solution(['maayama'])).toEqual(1);
});
4. 반성
- 문제를 다른 방식으로 해결할 수 있는가?
정규표현식을 사용해서 해결할 수 있다.
const solution = (babbling) => {
//aya, ye, woo, ma 같은 단어가 연속으로 사용되었는지 아닌지 확인하는 정규 표현식
const regexp1 = /(aya|ye|woo|ma)\1+/;
//aya, ye, woo, ma가 있는지 아닌지 확인하는 정규 표현식
const regexp2 = /^(aya|ye|woo|ma)+$/;
let count = 0;
for (let i = 0; i < babbling.length; i++) {
!regexp1.test(babbling[i]) && regexp2.test(babbling[i]) ? count++ : 0
}
return count;
};
정규식을 이용한 다른 풀이
const solution = (babbling) => {
return babbling
.map((it) => it.replace(/aya(?!aya)|ye(?!ye)|woo(?!woo)|ma(?!ma)/g, ''))
.filter((it) => it === '')
.length;
};
'코테연습' 카테고리의 다른 글
181. 기사 단원의 무기 Javascript (0) | 2023.01.25 |
---|---|
180. 크기가 작은 부분 문자열 Javascript (0) | 2023.01.20 |
178. 햄버거 만들기 Javascript (0) | 2023.01.20 |
177. 콜라문제 Javascript (0) | 2023.01.20 |
176. 가장 가까운 같은 글자 Javascript (0) | 2023.01.19 |
댓글