하루 기록

프로그래머스 코딩테스트, 옹알이(2) (Javascript) 본문

Today I Learned

프로그래머스 코딩테스트, 옹알이(2) (Javascript)

떼굴펜 2024. 5. 8. 11:45

문제 설명 (링크)

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling 이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한 사항

1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 30
문자열은 알파벳 소문자로만 이루어져 있습니다.

 

 

입출력 예

babbling result
["aya", "yee", "u", "maa"] 1
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] 2

 

 

유의사항

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

 

 

 

풀이

연속해서 같은 단어를 말할 수 없는 조카가 할 수 있는 옹알이는?

 

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

  return babblings.filter((babbling) => {
    let splitWord = babbling;

    for (let i = 0; i < words.length; i += 1) {
      const word = words[i];
      if (babbling.split(word.repeat(2)).length !== 1) { // 연속 체크
        return false;
      }
      splitWord = splitWord.split(word).join(" ").trim();
    }

    return splitWord.length === 0;
  }).length;
}

 

 

 

 

소감

 문제를 읽고 이해한 대로 받아적었던 내 코드.

아무래도 조건들을 주석으로 적는 연습을 해야겠다. 문제 읽고 이해한 대로 코드를 뱉고나니 연속 불가 조건을 까먹었다. 다시 짜면 더 오래 걸릴 것 같아 하나씩 구멍을 메꾸다보니 이지경이다... 다음엔 필수 조건들을 주석으로 적고 시작하면 이런 일이 적지 않을까?

 완성 후에 꼭 다른 사람의 코드를 보고 있는데, 저것도 내것이였으면 좋겠다는 욕심이 든다. 그 사람의 코드를 다 읽고 IDE에 같은 문제를 다시 한번 풀어보는 것도 재밌다. 좋은 코드의 생각을 따라가다보면 언젠간 내것이 되겠지.

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

  const results = babbling.map((s) => {
    for (let i = 0; i < words.length; i++) {
      const array = s.split(words[i]);
      const isOver = array.join("*").split("**").length !== 1; // 연속 확인용

      if (isOver) { // 
        break;
      }
      s = array.join(".");
    }
    return s;
  });

  return results.filter((s) => s.replaceAll(".", "").length === 0).length;
}

'Today I Learned' 카테고리의 다른 글

[Javascript] 자주 까먹는 Null 병합 연산자 (??)  (0) 2024.05.10
[Javascript] 자주 까먹는 Destucturing  (0) 2024.05.10
[javascript] Array.concat()  (0) 2024.05.05
[javascript] Array.at()  (0) 2024.05.05
[javascript] Array.of()  (1) 2024.05.02