나만의 작은 도서관

문제 133499. 옹알이 (2) 본문

프로그래머스 문제풀이/코드카타

문제 133499. 옹알이 (2)

pledge24 2024. 6. 15. 21:53

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

난이도 : Lv.1 

 

문제 요약 설명

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

입력

  • 문자열 배열 babbling

입력 제한

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

입력 예제

// input
["aya", "yee", "u", "maa"]

// ans
1

 

풀이 방식

babbling에 들어있는 각 단어를 순회한다. 해당 단어에 조카가 발음할 수 있는 단어(babu_list)가 포함되어 있다면, 전부 숫자로 변경한다. 이 때, 변경하는 숫자는 babu_list에서 해당 단어의 index이다. 

  • "yemawoo"에 "aya"라는 단어가 포함되어 있는 지 확인한다. 포함되어있지 않으므로 다음 단어로 넘어간다.
  • "yemawoo"에 "ye"라는 단어가 포함되어 있는 지 확인한다. 맨 처음에 포함되어 있으므로, "ye"를 "ye"의 index인 1로 교체한다. "yemawoo" => "1mawoo"
  • " 1mawoo"에 "woo"라는 단어가 포함되어 있는 지 확인한다. 4번째 부터 6번째까지의 위치에 포함되어 있으므로, "woo"를 "woo"의 index인 2로 교체한다. "1mawoo" => "1ma2"
  • "1ma2"에 "ma"라는 단어가 포함되어 있는 지 확인한다. 2번째부터 3번째까지의 위치에 포함되어 있으므로, "ma"를 "ma"의 index인 3으로 교체한다. "1ma2" => "132"

이렇게 교체된 문자열을 순회하면서 해당 단어를 조카가 발음할 수 있는 단어였는지 검증한다. 검증방법은 숫자만 포함되어 있으며, 연속되는 숫자가 존재하지 않는 지 확인하면 된다. 

숫자가 아닌 알파벳이 포함되어 있는 경우 -> 발음하지 못하는 단어

연속되는 숫자가 존재하는 경우 -> 발음하지 못하는 단어

위의 두 경우가 전부 아닌 경우 -> 발음 가능한 단어

 

위의 과정을 babbling 배열의 길이만큼 반복하면서 발음 가능한 단어의 개수를 계산하여 출력하면 된다.

정답 코드 

더보기
#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
    
    vector<string> babu_list = { "aya", "ye", "woo", "ma"};
    
    for(int i = 0; i < babbling.size(); i++){
        for(int j = 0; j < babu_list.size(); j++){
            while(babbling[i].find(babu_list[j]) != string::npos){
                babbling[i].replace(babbling[i].find(babu_list[j]), babu_list[j].length(), to_string(j)); 
            }
                 
        }
    }
    
    bool ispossible;
    char prev_c;
    for(string s : babbling){
        cout << s << ' ';
        ispossible = true;
        prev_c = '9';
        for(char c : s){
            if(!isdigit(c) || prev_c == c){
                ispossible = false;
                break;
            } 
            
            prev_c = c;
        }
        
        answer += (ispossible);
    }
    
    return answer;
}