저장을 습관화
프로그래머스 LV.0 옹알이 (1) 본문
프로그래머스 LV.0 옹알이 (1)
https://school.programmers.co.kr/learn/courses/30/lessons/120956
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
옹알이 (1)
2. 문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
3. 제한 사항
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 15
babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
문자열은 알파벳 소문자로만 이루어져 있습니다.
4. 예시
babbling | result |
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
5. 기본 제공 코드
function solution(babbling) {
var answer = 0;
return answer;
}
6. 제출한 내 답
const solution = (babbling) => {
let possible = ["aya", "ye", "woo", "ma"];
const replace = (givenWord) => {
for (j = 0; j < possible.length; j++) {
while (givenWord.includes(possible[j])) {
givenWord = givenWord.replace(possible[j], " ");
}
}
return givenWord;
};
const removeBlank = (blank) => {
while (blank.includes(" ")) {
blank = blank.replace(" ", "");
}
return blank;
};
return babbling
.map((v) => replace(v))
.map((v) => removeBlank(v))
.reduce((acc, cur) => (cur === "" ? (acc += 1) : acc), 0);
};
6-2. VSC에 작성한 내용
const solution = (babbling) => {
// console.log("--------------구분선--------------");
/**
* 가능한 발음 "aya", "ye", "woo", "ma"과
* 이 네 가지 발음을 최대 한 번씩 사용한 조합
*
* 1. 매개변수의 각 원소를 가져온다.
* 2. 각 원소가 가능한 단어를 포함하고 있는지 검사한다.
* 3. 포함하고 있다면, 공백으로 replace한다.
* replace("possbleWord", " ")
* 4. 모두 확인하고, 마지막으로 replace(" ", "") 한 다음
* 문자열의 길이가 0인 원소들의 개수를 반환한다.
*/
let possible = ["aya", "ye", "woo", "ma"];
const replace = (givenWord) => {
for (j = 0; j < possible.length; j++) {
while (givenWord.includes(possible[j])) {
givenWord = givenWord.replace(possible[j], " ");
}
}
return givenWord;
};
// for (i = 0; i < babbling.length; i++) {
// replace(babbling[i]);
// }
const removeBlank = (blank) => {
while (blank.includes(" ")) {
blank = blank.replace(" ", "");
}
return blank;
};
return babbling
.map((v) => replace(v))
.map((v) => removeBlank(v))
.reduce((acc, cur) => (cur === "" ? (acc += 1) : acc), 0);
};
// test
console.log(solution(["aya", "yee", "u", "maa", "wyeoo"]));
console.log(solution(["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]));
7. 특이사항
없음
프로그래머스 코딩 테스트 입문 단계에서는 정답률이 가장 낮은 문제였지만
나에게는 겹치는 선분의 길이 문제보다 훨씬 접근하기 편했다.
8. 다른 사람이 작성한 답
8-1. 정규표현식
function solution(babbling) {
var answer = 0;
const regex = /^(aya|ye|woo|ma)+$/;
babbling.forEach(word => {
if (regex.test(word)) answer++;
})
return answer;
}
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.0 등수 매기기 (0) | 2024.03.03 |
---|---|
프로그래머스 LV.0 치킨 쿠폰 (0) | 2024.02.29 |
프로그래머스 LV.0 겹치는 선분의 길이 (0) | 2024.02.29 |
프로그래머스 LV.0 문자열 밀기 (0) | 2024.02.28 |
프로그래머스 LV.0 다음에 올 숫자 (0) | 2024.02.27 |