본문 바로가기
학원에서 배운 것

[ 포스코 x 코딩온 ] 주차 회고 및 프로그래머스 옹알이 풀이

by 쿠리의일상 2023. 2. 17.

벌써 부트캠프 3주차? 가 끝나는데 짧은 기간에 많은 것을 배운 것 같다.

물론 혼자 공부하며 독학으로 개념을 다진 것도 있지만, 역시 직접 배워서 써보는 것이랑은 많이 다르다.

대강 이렇게 쓰이나...? 하던 것들이 배움을 이어가며 이렇게 쓰이는구나...! 로 바뀌고 있다.

점차 이러한 것들이 늘어가면, 부트캠프 끝날 때즈음에는 더욱 향상된 내가 되겠지 싶다.

 

이번 주말에는 

  1. 복습을 하며 미리 만들어놨던 스타벅스 사이트에 JS를 적용 시켜볼 것이다. + Swiper 사용
  2. 프로그래머스 입문(Lv0)을 전부 끝낼 생각이다.
  3. 지금까지 배운 내용을 복습(노션에 이미 정리 완료) + 이번 주차에 배운 내용을 노션에 정리할 예정이다.
  4. Map 과 Set에 대해 가볍게 개념 공부를 할 예정이다.
  5. 마지막으로 시간이 만약 남는다면 .... 코어 자바스크립트 '5장 클로저' 부분을 마저 읽을 것이다.

 

 

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

나는 전부터 프로그래머스 보단 백준을 풀어왔었다... 이유는 그냥..?

그래서 이 문제가 사악하다고 하다는 것도 처음 알았고 그래서 괜히 지레 겁먹기는 했지만..

근데 프로그래머스 정말 편하고 친절하다는 것을 느꼈다. 이 문제는 수업 시간에 풀어보라고 시간을 주셔서 풀어보았다.

 

배운 내용을 바탕으로 이거저거 써보려고 좀 노력하다가 코드가 좀 더러운데... 지금 생각해보니 includes() 로도 충분히 풀 수 있을 것 같다. 물론 까다롭기는 했지만, 문제 풀면서 일할 때 펫 이름을 변경하는 함수 만들 때가 생각나서 재미있었다. 

 

문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

1 ≤ babbling의 길이 ≤ 1001 ≤ babbling[i]의 길이 ≤ 15babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.문자열은 알파벳 소문자로만 이루어져 있습니다.

 

유의사항

네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.

 

정규표현식은 잘만 쓰면 참 사기같다... 물론 잘쓰면이지만

게임 채팅이나 닉네임을 만들 때 보통 금칙어나 비방어 같은 걸 데이터 테이블로 저장한 다음 그걸 읽어오며 정규표현식을 대입해줬던 기억이 있따.

물론 그 코드는 내가 짠건 아니고 사수님이 짠걸 보고 리뷰한거지만... 정규표현식으로 읽어온 다음 대체 문자(*)로 변환하는게 친숙해서 그렇게 접근해봤다.

function solution(babbling) {
  // 정규 표현식 사용
  const checkWords =/aya|ye|woo|ma/;
  const checkAlphabet = /[a-zA-Z]/;

  const tmpArr = [...babbling];
  // 1차적으로 aya|ye|woo|ma 이 포함된 문자열만 배열에 따로 저장
  const resultArr = tmpArr.filter((value) => {
    return checkWords.test(value);
  });
  
  let answerArr = [];
  for(let i = 0; i < resultArr.length; i++) {
  	// 해당 문자열을 *로 치환
    resultArr[i] = resultArr[i].replace(/aya|ye|woo|ma/g, '*');
	// 최종적으로 * 말고 소문자/대문자가 들어간 경우는 제외하여 새로 배열로 저장
	if(checkAlphabet.test(resultArr[i]) === false) {
      answerArr.push(resultArr[i]);
    }
  }
  return answerArr.length;
}