코딩테스트
[프로그래머스] 옹알이2
코딩너구리
2024. 8. 12. 18:01
https://school.programmers.co.kr/learn/courses/30/lessons/133499#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ babbling의 길이 ≤ 1001 ≤ babbling[i]의 길이 ≤ 30문자열은 알파벳 소문자로만 이루어져 있습니다.
string에서 활용할 수 있는 방법들을 생각해보았고, 0번째 인덱스를 기준으로 단어를 검색해서 다른단어가 존재하면 지우고, 그렇지 않다면 문자열을 남긴다. 그 후 문자열이 남아 있지 않다면 말할 수 있는 단어이기에 수를 더해준다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string CheckFirst(string babbling, char key) {
switch (key) {
case 'a': {
return "aya";
}
case 'y': {
return "ye";
}
case 'w': {
return "woo";
}
case 'm': {
return "ma";
}
}
return "";
}
bool Continue(string babbling, string key) {
int index = babbling.find(key);
if (babbling.find(key, index + key.size()) == index + key.size()) {
return true;
}
return false;
}
int solution(vector < string > babbling) {
int answer = 0;
for (int i = 0; i < babbling.size(); i++) {
string key = CheckFirst(babbling[i], babbling[i][0]);
while (babbling[i].find(key) != string::npos) {
if (false == Continue(babbling[i], key)) {
int index = babbling[i].find(key);
babbling[i].replace(babbling[i].find(key), key.size(), "");
key = CheckFirst(babbling[i], babbling[i][0]);
} else {
break;
}
}
if (babbling[i].size() == 0) {
answer++;
}
}
return answer;
}
fort문을 이용하는 방법보다 스위치 문을 통해 0번째 단어가 무엇인지 판별해 가져오게 한다.
그리고 연속된 숫자인지 여부를 검사하는 검사하는 과정이 추가로 필요하다.