STUDY/JavaScript
JavaScript | programmers 옹알이
Hanee_
2022. 10. 4. 14:54
문제 설명
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
답
function solution(babbling) {
let df = [ "aya", "ye", "woo", "ma"];
let res = 0; // 리턴 값
for(let w of babbling) {
if(df.some(f => w.includes(f+f))) continue; // 같은 발음이 연속되면 발음 불가
let rest = df.reduce((a, f) => a.replaceAll(f, ""), w);
if (rest.length > 0) continue; // 남는 글자 있으면 발음 불가
res++;
}
return res;
}
function solution(babbling) {
let df = [ "aya", "ye", "woo", "ma"];
let res = 0;
for(let w of babbling) {
if(df.some(f => w.includes(f+f))) continue;
let rest = df.reduce((a, f) => a.replaceAll(f, ""), w);
if (rest.length > 0) continue;
res++;
}
return res;
}
javascript 배열 1대1 순회
reduce
반복문을 돌며 배열 안의 요소들을 1대1로 짝지어 준다
배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초깃값);
예제
const oneTwoThree=[1,2,3]
result = oneTwoThree.reduce((acc, cur, i) => {
console.log(acc, cur, i);
return acc + cur;
}, 0);
// 0 1 0
// 1 2 1
// 3 3 2
result; // 6
초깃값을 적어주지 않으면 자동으로 초깃값이 0번째 인덱스의 값
const oneTwoThree=[1,2,3]
result = oneTwoThree.reduce((acc, cur, i) => {
console.log(acc, cur, i);
return acc + cur;
});
// 1 2 1
// 3 3 2
result; // 6
result = oneTwoThree.reduce((acc, cur) => {
if (cur % 2) acc.push(cur);
return acc;
}, []);
result; // [1, 3]
reduceRight
reduceRight는 reduce와 동작은 같지만 요소 순회를 오른쪽에서부터 왼쪽
result = oneTwoThree.reduceRight((acc, cur, i) => {
console.log(acc, cur, i);
return acc + cur;
}, 0);
// 0 3 2
// 3 2 1
// 5 1 0
result; // 6
every, some : 특정 조건 만족하는지 배열 내부 원소 순회하면서 검사
every
조건을 만족하지 않는 값 발견 시 순회 중단, return False
let data=[{name:"jack", age:20},{name:"kevein",age:16},{name:"rick",age:27}]
let result=data.every(x=>{
return x.age>=20
});
console.log(result); // false
some
조건을 만족하는 값 발견 시 순회 중단, return True
let data=[{name:"jack", age:20},{name:"kevein",age:16},{name:"rick",age:27}]
let result=data.some(x=>{
return x.age>=20
});
console.log(result); // true
문자 치환
replaceAll()
const message = "Hello Hello world!";
// "Happy Happy world!"
document.write(message.replaceAll("Hello", "Happy"));
replace()
조건 대상이 되는 첫 번째 문자 하나만 치환
const message = "Hello Hello world!";
// "Happy Hello world!"
document.write(message.replace("Hello", "Happy"));
replace()는 전달받은 문자를 수정하는 것이 아니라 새로운 값을 만들어 반환
includes()
string.includes( searchString, index )
- searchString : 검색할 문자열로 필수 요소입니다. 대소문자를 구분합니다.
- index : 검색을 시작할 위치입니다. 선택 요소로, 값이 없으면 전체 문자열을 대상
'abzcd'.includes( 'z' ) // true
'abzcd'.includes( 'z', 2 ) //true
'abzcd'.includes( 'z', 3 ) //false