https://school.programmers.co.kr/learn/courses/30/lessons/120956
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> babbling) {
int answer = 0;
for(int i=0;i<babbling.size();i++)
{
string a="";
bool ch=false;
for(int j=0;j<babbling[i].length();j++)
{
a+=babbling[i][j];
if(a.length()==2)
{
if(a!="ye"&&a!="ma")
{
ch=false;
}
else
{
a="";
ch=true;
}
}
if(a.length()==3)
{
if(a!="aya"&&a!="woo")
{
ch=false;
break;
}
else
{
ch=true;
a="";
}
}
}
if(a.length()!=0)
{
if(a=="aya"||a=="ye"||a=="woo"||a=="ma")
ch=true;
else
ch=false;
}
if(ch==true)
answer++;
}
return answer;
}
설명
이 문제는 주어진 4개의 문자열("aya", "ye", "woo", "ma")로만 babbling의 문자열들이 이루어져 있는지 파악하고
4개의 문자열로만 이루어진 문자열이 몇개인지를 리턴하는 문제이다.
먼저 맨 바깥 for문은 babbling의 문자열을 하나씩 보기위한 for문이다.
그리고 두 번째 for문으로 babbling의 i 번째 문자열을 문자 하나씩 보기 위한 반복문이다.
string a="";
bool ch=false;
for(int j=0;j<babbling[i].length();j++)
babbling[i] 문자열의 j 번째 문자를 a 문자열에 더한다.
a+=babbling[i][j];
그리고 길이가 2일때와 3일때를 비교하여 주어진 문자열에 해당하는지를 판단하여
아닌 것이 있다하면 그 문자열은 주어진 4개의 문자열로만 이루어진 것이 아니기 때문에 바로
다음 babbling의 문자열로 넘어간다.
if(a.length()==2)
{
if(a!="ye"&&a!="ma")
{
ch=false;
}
else
{
a="";
ch=true;
}
if(a.length()==3)
{
if(a!="aya"&&a!="woo")
{
ch=false;
break;
}
else
{
ch=true;
a="";
}
}
만약 맞으면 ch 변수를 true로 바꿔주고 a를 초기화한다.
for문이 종료했을 때 만약 ch가 true라면 주어진 4개의 문자열로만 이루어졌다고 판단할 수 있다.
따라서
if(ch==true)
answer++;
이렇게 answer를 1 증가시킨다.
이 때, 증가 전에 예외가 있다면 2,3을 판단하기 전에 for문이 끝나는 경우다.
if(a.length()!=0)
{
if(a=="aya"||a=="ye"||a=="woo"||a=="ma")
ch=true;
else
ch=false;
}
때문에 위와 같이 다시 한 번 4개의 문자열로 이루어져 있는지 확인하고 ch를 업데이트 한다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - 연속된 수의 합 - C++ (0) | 2023.09.18 |
---|---|
프로그래머스 - 유한소수 판별 - C++ (0) | 2023.09.17 |
프로그래머스 - 분수의 덧셈 - C++ (0) | 2023.09.15 |
프로그래머스 - 삼각형의 완성 - C++ (0) | 2023.09.13 |
프로그래머스 - 평행 - C++ (0) | 2023.09.12 |