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