Level. 1
문제
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다.
조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다.
문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 30
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
풀이
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> babbling) {
int answer = 0;
vector<string> words = {"aya", "ye", "woo", "ma"};
for(int i = 0; i<babbling.size(); i++){
string str = babbling[i];
int pre_index = -1;
for(int w_index = 0; w_index < words.size(); w_index++){
string word = words[w_index];
if(word == str.substr(0, word.size())){
if(w_index == pre_index) break;
str = str.substr(word.size());
pre_index = w_index;
w_index = -1;
}
}
if(str.size() == 0){
answer ++;
}
}
return answer;
}
해결방법
1. 조카 발음 단어 배열 words을 만든다.
2. 한 문장씩 words로 탐색하는 반복문을 돌린다.
3. substr을 사용해 해당 문장 str가 words 중 한 단어로 시작할 경우를 찾고, 찾았을 경우 str의 맨 앞에서부터 해당 단어를 지운다.
4. w_index는 당장 발음한 단어, pre_index는 직전 발음한 단어이다. 같은 발음을 하는 것을 어려워하므로 pre_index == w_index 이면 탐색을 멈춘다.
다른 풀이
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> babbling)
{
int answer=0;
for(string s : babbling)
{
int flag=0; bool j=true;
for(int i=0; i<s.length(); i++)
{
if(s.substr(i,3)=="aya" && flag!=1) { flag=1; i+=2; }
else if(s.substr(i,2)=="ma" && flag!=2) { flag=2; i+=1; }
else if(s.substr(i,3)=="woo" & flag!=3) { flag=3; i+=2; }
else if(s.substr(i,2)=="ye" && flag!=4) { flag=4; i+=1; }
else { j=false; break; }
}
if(j==true) answer++;
}
return answer;
}
if 조건문에 s.substr 을 넣어 더 간결하다.
따로 단어별로 배열을 생성하지 않았고, flag를 사용해 연속해서 같은 발음을 하는것을 체크할 수 있다.
가독성이 좋은 코드인 것 같다. 참고가 된다!
https://school.programmers.co.kr/learn/courses/30/lessons/133499?language=cpp
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 명예의 전당(1) - 우선순위 큐 priority_queue (0) | 2023.07.06 |
---|---|
[프로그래머스] 과일 장수 - 우선순위큐 priority_queue (0) | 2023.07.06 |
[프로그래머스] 햄버거만들기 - vector.back() (0) | 2023.07.06 |
[프로그래머스] 콜라 문제 (0) | 2023.06.25 |
[프로그래머스] 영어 끝말잇기 (0) | 2023.06.25 |