Minwook’s portfolio

코딩테스트 문제풀이 옹알이(1) 풀이 본문

Today I Learned/JavaScript

코딩테스트 문제풀이 옹알이(1) 풀이

yiminwook 2023. 1. 3. 19:44

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/courses/30/lessons/120956

저작권 관련

더보기

비상업적, 비영리적 용도로 사용합니다.

광고가 노출되지 않는 블로그나 YouTube 채널, GitHub 등에 문제 풀이 게시

 

코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다. (지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

※ 2020 KAKAO BLIND RECRUITMENT, Summer/Winter Coding 등의 문제는 기업 코딩 테스트에 나온 문제이나, 

코딩테스트 연습에 공개된 문제이기 때문에 마찬가지로 비상업적, 비영리적 용도로 게시할 수 있습니다.

(2021. 01. 08 업데이트)

 

 

문제 설명.

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

 

 

제한사항

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

 

입출력예.

babbling result
["aya", "yee", "u", "maa", "wyeoo"] 1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] 3

 

이하생략.

 

 

위 문제를 풀때 고려해야하는 사항.

1. babbling은 단어로 구성된 배열이기 때문에 순회 해야합니다.

2. 발음할 수 있는 단어가 있으면 1씩 증가시킵니다. (발음할 수 없으면 증가시키면 안됩니다.)

3. 각 단어가 발음 할 수 있는 단어인지 검증합니다.

4. 발음은 최대 1번씩 사용 할 수 있습니다. (발음이 두번이상 포함된 단어는 발음 할 수 없는 단어로 취급합니다.)

 

접근방법.

발음할 수 있는 단어를 해쉬테이블에 저장시키고

단어를 입력하면 해쉬테이블을 통해 발음할 수 있는 단어인지 검증 할 수 있는 함수를 만듭니다.

babbling배열을 돌며 만든 함수를 순회하며 count를 증가시킵니다.

 

function solution(babbling) {
    let answer = 0; //발음할 수 있는 단어 갯수

    function isSay(string) { //단어를 하나씩 넣어서 발음 할 수 있으면 카운트를 1증가시키는 함수
        const hashTable = new Set(["aya", "ye", "woo", "ma"]); //발음가능한 단어를 해시테이블에 넣어둔다.
        let temp = "";
        
        for (const letter of string) { //단어의 각 글자를 순회
            temp += letter; //단어의 글자를 하나씩 temp에 추가
            
            if (hashTable.has(temp)) { //temp가 해시테이블에 포함되어 있으면
                hashTable.delete(temp); //해시 테이블에서 지운다.(두번이상 발음하지 않도록)
                temp = ""; //지웠으면 초기화
            }
            
            if (temp.length > 3) continue; //3자리가 넘으면 발음 할 수 없는 단어, 다음 단어로 넘어감
        }
        
        if (!temp) answer++; //temp가 남아있지않으면 1증가
    }
    
    babbling.forEach(el => isSay(el)); //babbling을 순회하며 isSay()를 실행시킨다.
    
    return answer;
}

 

 

 

 

 

Comments