[프로그래머스] 옹알이(1)

조정현·2025년 1월 16일

0레벨만 죽 풀다가 정답률 제일 낮은 문제 체험해보려고 도전했지만
장렬하게 패배해버리고 안 까먹으려고 정리해둔다...

처음엔 문제가 이해조차 안돼서 1차 절망
이해는 됐는데 어떻게 로직을 짜야하지 싶어서 2차 절망
검색해서 기본 로직은 생각해냈으나 머리가 안 돌아가서 3차 절망
0레벨이 이러면 1레벨부턴 어떻게 풀지 싶어서 최종 절망
어쩌겠어 할건 해야지

처음에 생각한건 가능한 발음을 기준으로 문자열을 split하는거였다
그리고 쪼개진 문자열을 다시 split하고 그렇게 빈 문자열이 될 때까지...
재귀함수를 생각했는데 파고 들어갈수록 아무래도 아닌것 같고
어떻게 짜야할지도 모르겠어서 슬쩍 검색해봤다

그러다 본게 split이 아니라 일치하는 문자열을 빈공백으로 바꾸는것!
발음이 한번씩만 나온다고 했으니 일치하는 문자열을 모두 공백으로 바꾸면
발음이 가능한 단어는 공백문자만 남게되는 것이다.

⬇️ 그렇게 짠 코드

// 발음의 종류
const sample = {1: "aya", 2: "ye", 3: "woo", 4: "ma"}
    
// 각 단어에서 가능한 발음을 띄어쓰기로 변환한 것을 convertBabblingArr에 저장
const convertBabblingArr = []
babbling.forEach(item => {
  let convertbabbling = item;
  for(let i = 1; i <= Object.keys(sample).length; i++) {
    convertbabbling = convertbabbling.replace(sample[i], " ")
  }
  convertBabblingArr.push(convertbabbling)
})

그리고나서 convertBabblingArr의 각 원소들이
공백문자만으로 이뤄져있는지 확인해야 하는데
for문을 돌리자니 좀 비효율적인 느낌이라 정규표현식을 찾아봄

⬇️ 오늘의 기억할 개념

/\S/ -> 공백이 아닌 모든 문자
test() -> 인수가 정규표현식을 포함하는지 확인하여 불리언 값을 반환

⬇️ 그리고 짠 코드

// convertBabblingArr의 원소가 공백이 아닌 문자로 이루어져 있는지 확인하여 공백문자로 이루어진 것만 반환
convertBabblingArr.filter(item => !/\S/.test(item)).length

결과는 성공했고 다른 사람들의 풀이를 확인하니 역시 정규표현식을 쓴 사람이 많았다
문자열 비교엔 역시 정규표현식이 압도적으로 좋은듯...

0개의 댓글