알고리즘 문제 풀기(프로그래머스)
https://github.com/hoinlee-moi/Algorithm
JS기본문법 다시 공부
https://github.com/hoinlee-moi/ModernJS
React 강의 듣기
https://github.com/hoinlee-moi/React_prac
오늘 저녁 가게일 하느라 알고리즘 문제와 JS공부로 끝이 났다.
저녁에 자기전 react강의를 어떻게 다 듣고 잘 예정이다.
오늘 알고리즘
옹알이(2) https://school.programmers.co.kr/learn/courses/30/lessons/133499
function solution(babbling) {
let answer = 0;
const babble = ["aya", "ye", "woo", "ma"]
babbling.forEach(v=>{
for(let i=0;i<=babble.length-1;i++){
let regExp = new RegExp(`(${babble[i]}){2}`)
if(!v.includes(babble[i])) continue;
if(v.match(regExp)!==null) break;
else{
v=v.replaceAll(babble[i],"0")
if(Number(v)===0) {
answer++
break;
}
}
}
})
return answer
}
answer)를 할당하고 주어진 옹알이를 babble에 배열로 만든다.babbling을 forEach로 돌아 각 단어들을 요소로 가져온다.for문을 이용하여 babble에서 단어를 하나씩 가져와 말을 할 수 있는 단어인지 판단한다.RegExp객체를 이용하여 babble에서 가져온 단어를 정규식 변수로 만든다.{2}를 정규식 안에 ```` 백틱을 이용해 포함시켜 정규식 변수로 만들어야 한다.if조건문을 통해 가져온 babble의 단어가 없다면 바로 다음 단어를 찾아볼 수 있게 continue를 입력했다.if조건문으로 match를 활용해 아까 만들어둔 정규식 변수를 이용해 반복되어 붙여져 있는지 확인한다. 이때 match는 단어가 반복해서 있을 경우 값을 주고 없을 경우 null을 주기에 null이 아니면 반복된 단어가 있는 것이기 때문에 이 단어는 옹알이 할 수 없는 단어라 판단 break시킨다.replaceAll을 통해 babble단어를 문자열0으로 바꾸어주고 v에 재할당한다.0으로 바꾼 이유는 replaceAll을 통해 ""빈칸으로 삭제시키면 제거된 값들이 붙어 연속된 단어로 변할 수 있기 때문에 구별을 위해 0을 문자열로 집어 넣었다0은 아무리 0이 많이 붙어 있어도("00000000") 숫자로 바꾸면 0으로 변하기에 이 값이 더이상 단어 판별이 필요한지를 확인할 수 있게된다.v의 값이 숫자0이라면 멈추도록 하고 answer에 ++를 시키고 break하도록 했다나도 같은 정규식을 썼지만 훨씬 더 잘 쓴 정규식 해법이 있어 아래에 붙인다.
정규식과 reduce의 결합으로 잘 만든 식인 것 같다.
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);
}