[프로그래머스 / C++] 옹알이 (2)

YH·2023년 12월 10일
0

문제

옹알이 (2) : 문제 링크


문제 분석

  • 머쓱이는 태어난 지 11개월 된 조카를 돌보고 있다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워한다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return
  • 발음할 수 있는 단어의 개수를 저장할 answer을 0으로 초기화. 이중 for loop을 사용하여, 첫 번째 for loop는 문자열 배열 babbling의 첫번째부터 마지막 까지 순환. 이때 발음 가능 여부를 판단할 정수형 변수 check를 1로, 연속해서 같은 발음 인지 확인할 정수형 변수 double_check를 0으로 초기화.
  • 두 번째 for loop는 각 문자열의 첫번째부터 마지막까지 순환하고, substr() 함수를 사용하여 "aya", "ye", "woo", "ma"를 발견하고 연속해서 같은 발음이 아니라면, 그 길이만큼 index를 뒤로 이동하고 double_check에 해당 번호를 저장. 검사 중 발음하지 못하는 단어를 발견하면 check와 double_check를 0으로 초기화하고 loop를 탈출. loop 탈출 후, check가 1일 경우 발음할 수 있는 단어이므로 answer을 1씩 늘린다. 최종적으로 저장된 answer을 return

substr() 함수 사용법
1. substr(시작인덱스, 문자열 길이)
=> 시작인덱스 부터 주어진 문자열 길이만큼 추출
2. substr(시작인덱스)
=> 시작인덱스 부터 문자열 끝까지 추출


풀이

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> babbling) {
    int answer = 0;
    
    for(int i = 0; i < babbling.size(); ++i) {
        int check = 1, double_check = 0;
        for(int j = 0; j < babbling[i].size(); ++j) {
            if(babbling[i].substr(j,3) == "aya" && double_check != 1) {
                j += 2;
                double_check = 1;
            }
            else if(babbling[i].substr(j,2) == "ye" && double_check != 2) {
                j += 1;
                double_check = 2;
            }
            else if(babbling[i].substr(j,3) == "woo" && double_check != 3) {
                j += 2;
                double_check = 3;
            }
            else if(babbling[i].substr(j,2) == "ma" && double_check != 4) {
                j += 1;
                double_check = 4;
            }
            else {
                check = 0;
                double_check = 0;
                break;
            }
        }
        if(check == 1) answer++;
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글