나만의 작은 도서관
문제 133499. 옹알이 (2) 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/133499
난이도 : 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;
}
'프로그래머스 문제풀이 > 코드카타' 카테고리의 다른 글
문제 140108 문자열 나누기 (0) | 2024.06.18 |
---|---|
문제 42862. 체육복 (0) | 2024.06.17 |
문제 131128. 숫자 짝꿍 (0) | 2024.06.16 |
문제 77484. 로또의 최고 순위와 최저 순위 (1) | 2024.06.14 |
문제 42840. 모의고사 (0) | 2024.06.10 |