[programmers/C++] 옹알이(1)
문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 “aya”, “ye”, “woo”, “ma” 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
입출력 예
babbling | result |
---|---|
[“aya”, “yee”, “u”, “maa”, “wyeoo”] | 1 |
[“ayaye”, “uuuma”, “ye”, “yemawoo”, “ayaa”] | 3 |
코드 구현
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<string> babbling) {
int answer = 0;
vector<string> speak = {"aya", "ye", "woo", "ma"}; //가능한 발음
for(string bab:babbling){ //babbling 배열에서 하나씩 불러오기
vector<bool> babbool(bab.size(), false); //bab의 size만큼 false 생성
for(int i=0; i<speak.size(); i++){ //speak 배열에서 하나씩 불러오기
if(bab.find(speak[i]) != string::npos){ //babbling에 가능한 발음 있으면
int startpos = bab.find(speak[i]); //가능한 발음 시작위치
int speak_size = speak[i].size(); //speak 크기
for(int j=startpos; j<startpos+speak_size; j++){
if(babbool[j]==false){
babbool[j]=true; //babbling에서 가능한 발음 true로 전환
}
else if(babbool[j]==true){
babbool[j]=false;
}
}
}
}
bool all_true=true; //모든 요소가 true인지 확인하기 위한 변수 초기화
for(bool b: babbool){
if(b==0){ //c++에서 true=1, false=0으로 출력
all_true=false;
break;
}
}
if(all_true){ //모든 요소가 true이면
answer++;
}
}
return answer;
}
공부한 내용
1. string.find() 함수
#include <string>
string str;
str.find(value);
‘string’ 클래스의 멤버 함수 중 하나로, 특정 문자열이 다른 문자열 안에 포함되어 있는지를 검사한다. 만약 포함되어 있다면, 그 위치(index)를 반환하고, 그렇지 않으면 ‘string::npos’를 반환한다.
예시
string str = "Hello World!"
size_t found = str.find("Wor");
if(found != string::npos){
cout << "문자열에 'Wor'가 존재합니다." << endl;}
else{
cout << "문자열에 'Wor'가 존재하지 않습니다." << endl;}
2. string::npos
문자열에서 특정 문자열을 찾지 못한 경우에 반환되는 특별한 상수이다. string::find()함수는 문자열이 존재하지 않을 때 npos를 반환한다.
Review
bool vector를 사용하여 해결했다.
예를 들어 for(string bab:babbling)에서 bab이 “ayaye”일때, babbool={false, false, false, false, false}가 된다.
if(bab.find(speak[0]) != string::npos)이라고 가정했을때,
“aya”가 “ayaye”안에 포함되어 있으니까 startpos=0, speak_size=3이 된다.
for(int j=0; j<3; j++) 이므로 babbool={false, false, false, false, false}에서 babbool={true, true, true, false, false}가 된다.
이런식으로 babbool의 모든 요소가 true가 되면 answer+1이된다.
난이도 Lv.0임에도 불구하고 어려웠다.
공부하자.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges