※주의※
저의 풀이가 정답은 아닙니다.
다른 코드가 더 효율적이거나 좋을 수 있습니다.
언제나 다른 사람의 코드는 참고만 하시기 바랍니다.
[문제 풀이 사이트]
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 설명]
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
[제한 사항]
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 30
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
[입출력 예]
babbling | result |
["aya", "yee", "u", "maa"] | 1 |
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] | 2 |
[입출력 예 설명]
입출력 예 #1
- ["aya", "yee", "u", "maa"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
입출력 예 #2
- ["ayaye", "uuuma", "yeye", "yemawoo", "ayaayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye" + "ma" + "woo" = "yemawoo"로 2개입니다. "yeye"는 같은 발음이 연속되므로 발음할 수 없습니다. 따라서 2를 return합니다.
[문제 풀이]
우선 조건은 조카가 "aya", "ye", "woo", "ma" 발음, 네가지 발음을 조합한 발음과 같은 단어를 연속적으로 발음할 수 없다.
내가 이 문제를 풀 때 사용한 알고리즘은
1. 문자열 배열 babbling의 각 원소(문자열)를 하나하나 확인한다.
2. 문자열의 각 문자를 확인하면서 길이가 2 또는 3일 때 발음 할 수 있는 발음인지 확인한다.
2-1. 발음할 수 있는 발음이라면,
문자열에서 해당 발음을 find로 찾고 길이가 2라면 "zz", 길이가 3이라면 "zzz"로 치환해준다.
그리고 이전 발음 했던 문자열 변수(beforeStr)에 발음한 문자열을 저장해준다.
2-2. 발음할 수 없는 발음이라면 1번으로 돌아간다.
3. 연속적으로 같은 발음을 할 수 없기 때문에 이전 발음 했던 문자열 변수(beforeStr)이 현재 확인한 발음과 같은지 확인한다.
3-1. 같은 발음이라면 1번으로 돌아간다.
4. 1~2번을 모두 수행 후 문자열 배열 babbling을 확인한다.
4-1. 각 원소(문자열)를 확인했을 때 모두 문자가 'z'로 이루어졌다면 발음할 수 있는 발음으로 판단하여 answer를 1증가시켜준다.
4-2. 각 원소(문자열)를 확인했을 때 모두 문자가 'z'로 이루어지지 않았다면 발음할 수 없는 발음으로 판단한다.
[최종 코드]
[GitHub]
GitHub - SmallPeanutPark/Programmers: Study Programmers for Coding Test
Study Programmers for Coding Test. Contribute to SmallPeanutPark/Programmers development by creating an account on GitHub.
github.com
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<string> p = {"aya", "ye", "woo", "ma"};
bool distinguishStr(string str) {
for(int i = 0; i < str.length(); ++i) {
if(str[i] != 'z') return false;
}
return true;
}
int solution(vector<string> babbling) {
int answer = 0;
int gSize = babbling.size();
string beforeStr = "";
for(int i = 0; i < gSize; ++i) {
string s = babbling[i];
string t = "";
int gLen = babbling[i].length();
int sLen = 0;
beforeStr.clear();
for(int j = 0; j < gLen; ++j) {
t += s[j];
sLen = t.length();
if((sLen == 2) || (sLen == 3)) {
if(beforeStr.compare(t) == 0) {
break;
}
if(t.compare(p[0]) == 0) {
beforeStr = p[0];
s.replace(s.find(p[0]), sLen, "zzz");
t.clear();
} else if(t.compare(p[1]) == 0) {
beforeStr = p[1];
s.replace(s.find(p[1]), sLen, "zz");
t.clear();
} else if(t.compare(p[2]) == 0) {
beforeStr = p[2];
s.replace(s.find(p[2]), sLen, "zzz");
t.clear();
} else if(t.compare(p[3]) == 0) {
beforeStr = p[3];
s.replace(s.find(p[3]), sLen, "zz");
t.clear();
} else {}
}
else if(sLen < 2) {
continue;
}
else {
// sLen > 3
break;
}
}
bool isSuccess = distinguishStr(s);
if(isSuccess) answer += 1;
}
return answer;
}
'PS > Programmers' 카테고리의 다른 글
[Programmers Level1] 성격 유형 검사하기(C++) (2) | 2022.12.03 |
---|---|
[Programmers Level1] 명예의 전당(C++) (2) | 2022.12.02 |
[Programmers Level2] 귤 고르기(C++) (0) | 2022.11.30 |
[Programmers Level1] 기사단원의 무기(C++) (0) | 2022.11.25 |
[Programmers Level1] 햄버거 만들기(C++) (0) | 2022.11.24 |
댓글