코딩 테스트/test_javaScript

[코딩테스트/javaScript] 옹알이 (2)

ijooha 2025. 1. 20. 17:49

우선 옹알이 할 수 있는 글자들의 배열을 만들어준 뒤,

입력된 옹알이 (babbling)과 할 수 있는 글자(ava) // available이라는 뜻,,

를 각각 순회하며 해당되는 글자는 삭제시키고, 모두 삭제되면 카운트 하는 방식으로 만들어줬다.

function solution(babbling) {
    const ava = ["aya", "ye", "woo", "ma"]
    let count = 0;
    
    babbling.forEach((b) => {
            ava.forEach((a) => {
                if (b.includes(a)) {
                    b = b.replace(a,'');
                }
            })
        if (b.length === 0) {
            count ++;
        }
    })
    return count;
}

 

틀렸다.

연속되는 발음은 못한다는 부분을 빠트렸다..

추가..

indexOf 메소드를 사용해야겠다.

 

..

실패했다 ! 어떻게 써야할지 모르겠ㄷ ㅏ

찾아보니 문자열의 첫 글자를 확인할 수 있는 startwith라는 메소드가 있다. 이걸 사용..

function solution(babbling) {
    const ava = ["aya", "ye", "woo", "ma"]
    let count = 0;
    
    babbling.forEach((b) => {
        let pre = '';
        
        while (b.length > 0) {
            let found = false;
            
            for (let a of ava) {
                if (b.startsWith(a) && pre !== a) {
                    b = b.replace(a,'');
                    pre = a;
                    found = true;
                    break;
                }
            }
            if (!found) {
                return;
            }
        }
        
        if (b.length === 0) 
            count ++;
    })
    
    return count;
}

 

중간에 계속 반복문을 멈추는 법이 익숙하지 않아서 헤맸다.

return 이나 break 사용해주기..

       break & return 

1 break

- for, while, forEach 에 사용

- 현재의 반복문만 종료시키고 그 이후 코드는 계속 실행됨.

 

2 return

- 함수의 실행을 종료, 반복문을 포함한 함수 자체가 종료됨.

 

return은 함수 자체를 종료시키기 때문에

내부 반복문만 종료하고 싶을 땐 break를 사용, 외부 반복문을 종료하고 싶으면 return 사용

 

 


       최종 코드 

function solution(babbling) {
    const ava = ["aya", "ye", "woo", "ma"]
    let count = 0;
    
    babbling.forEach((b) => {
        let pre = '';
        
        while (b.length > 0) {
            let found = false;
            
            for (let a of ava) {
                if (b.startsWith(a) && pre !== a) {
                    b = b.replace(a,'');
                    pre = a;
                    found = true;
                    break;
                }
            }
            if (!found) {
                break;
            }
        }
        
        if (b.length === 0) 
            count ++;
    })
    
    return count;
}

 

 


       다른 사람 풀이 

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);
}

멋지고... 무슨 말인지 못알아듣겠다 호호..

공부 열심히 해야지