안녕하세요

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

프로그래머스/Lv.0

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

sakuraop 2022. 11. 13. 01:06
  • 옹알이 (1)
문제 설명

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


제한사항
  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 원소에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

입출력 예babblingresult
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3

풀이 해설

1. babbling의 원소에서 옹알이 발음은 각각 최대 한 번씩 등장한다는 제한사항이 있습니다.
2. babbling의 원소의 길이에서 pronunciation이 존재한다면 해당 발음의 길이만큼을 빼줍니다.
3. babbling 원소의 길이가 0이라면 가능한 발음입니다.

ex)
(ayaye의 길이 5) - (aya의 길이 3) - (ye의 길이 2) = (남은 발음 없음 0) 발음 가능
(uuuma의 길이 5) - (ma의 길이 2) = (남은 uuu의 길이 3) 발음 불가능
제출한 답

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

    let count = 0;

    for (let i = 0; i < babbling.length; i++) {
        let length = babbling[i].length;
        for (let j = 0; j < pronunciation.length; j++) {
            // 발음이 존재한다면 해당 발음의 길이만큼 length에서 빼줍니다.
            if (babbling[i].indexOf(pronunciation[j]) !== -1) {
                length -= pronunciation[j].length;
            }
        }
        if (length === 0) {
            count++;
        }
    }

    return count;
}

 

조건문 코드를 더 짧게 쓰고 싶다면...

if (length === 0) {
            count++;
        }

⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
    for (let i = 0; i < babbling.length; i++) {
        let length = babbling[i].length;
        for (let j = 0; j < pronunciation.length; j++) {
            if (babbling[i].indexOf(pronunciation[j]) !== -1) {
                length -= pronunciation[j].length;
            }
        }
        !length && count ++
    }


0은 판별식에서 false와 같이 취급되기 때문에
length === 0 일 때
length === false와 같고 
length 자체가 false로 취급됩니다.

즉 
!length === 1 일 때
!length === true
!legnth 자체가 true로 취급됩니다.

따라서 !length 로 적어주면 true가 됩니다.

그리고 &&에는
=> (true) && (오른쪽실행)
위와 같은 기능이 있습니다.
!length 자체가 true이기 때문에 오른쪽의 count++ 코드를 실행합니다.