Programmers.js - 옹알이 (2)

박요셉·2024년 6월 11일
2

Programmers.Js

목록 보기
24/26
post-custom-banner

코테 문제는 풀 수록 현타가 오는 ㅜ;;
풀다 안풀려서 20분 멍때렸다가 방법을 뜯어 고쳐서 다시 생각하고 풀었음.

처음 시도때는 괜히 복잡하게 하려는 생각보단 기본적인 것부터 푸는 연습을 해보고
풀렸다면 그 이후에 좀 더 나은 방향으로 풀어보려는 시도를 해야 할 듯 싶음

연속된 발음이 있는가를 정규식으로 해결해보려다 꼬였는데 그냥 repeat을 써서 검사하면 정말...쉬운...하으..

join(' ')도 ''로 해주게되면 실패가 떠서 왜그런가 했더니 자르고 자르고하다보면 발음 가능한 것이 만들어질 수 있음

function solution(babbling) {
    const pronounce = ['aya','ye','woo','ma']
    let count = 0;
    for(let i = 0; i< babbling.length; i++){
        let babble = babbling[i]
        
        for(let j =0; j<pronounce.length; j++){
            if(babble.includes(pronounce[j].repeat(2))) break;
            
            babble = babble.split(pronounce[j]).join(' ')
        }
        babble = babble.split(' ').join('')
        babble.length === 0 ? count++ : null
    }
    
    return count;
}

아래는 정규식 풀이
정규식 제대로 공부좀 해야할 필요성이 느껴지는;;


function solution(babbling) {
  const regexp1 = /(aya|ye|woo|ma)\1+/;
  const regexp2 = /^(aya|ye|woo|ma)+$/;

  return babbling.reduce((ans, word) => (
    !regexp1.test(word) && regexp2.test(word) ? ++ans : ans
  ), 0);
}

아래는 reduce를 이용한 풀이
갠적으론 이 풀이가 젤 맘에 듦

굳이 for문이 두개 있을 필요가 없어보여 하나로 합쳐봤는데 당연히 잘 됨.
이 문제처럼 특정 값의 acc? 누적 값이 필요하다면 reduce로 푸는 것을 생각해봐야 할듯

function solution(babbling) {
    const babblables = ["aya", "ye", "woo", "ma"];

    return babbling.reduce((possible, babbl, index) => {
        for (let i = 0; i < babblables.length; i += 1) {
            if (babbl.includes(babblables[i].repeat(2))) return possible;
        }

        for (let i = 0; i < babblables.length; i += 1) {
            babbl = babbl.split(babblables[i]).join(' ').trim();
        }

        if (babbl) return possible;

        return possible += 1;
    }, 0)
}
profile
개발자 지망생
post-custom-banner

0개의 댓글