728x90
문제 풀이
이 문제는 문자열 사이에서 미리 주어진 부분 문자열들을 찾아내는 것이다. 문자열 전체가 부분 문자열로 이루어져 있고, 같은 부분 문자열이 연속적으로 배치되지 않은 문자열을 찾아야한다.
각각의 문자열은 주어진 부분 문자열의 길이만큼 추출한 뒤 비교해서 같으면 그 부분을 삭제시키는 방식으로 풀었다.
만약 문자열이 주어진 부분 문자열로만 이루어져있다면, 반복문을 통해 완전히 제거가 될 것이다.
마지막에 길이가 0인 문자열일 경우, 부분 문자열로 이루어진 문자열로 판단할 수 있으므로 정답을 찾을 수 있다.
정답 코드
C++
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> babbling)
{
int answer = 0;
for (int bb_idx = 0; bb_idx < babbling.size(); ++bb_idx) {
vector<string> word{ "aya", "ye", "woo", "ma" };
string prev{ "" };
for (int w_idx = 0; w_idx < word.size(); ++w_idx) {
if (prev != word[w_idx] && babbling[bb_idx].substr(0, word[w_idx].length()) == word[w_idx]) {
babbling[bb_idx] = babbling[bb_idx].substr(word[w_idx].length(), babbling[bb_idx].length() - 1);
prev = word[w_idx];
w_idx = -1;
}
}
if (babbling[bb_idx].empty()) ++answer;
}
return answer;
}
python
def solution(babbling):
answer = 0
word = ["aya", "ye", "woo", "ma"]
for bb_idx in range(len(babbling)) :
prev = ""
w_idx = 0
while w_idx < 4 :
if prev != word[w_idx] and babbling[bb_idx][0 : len(word[w_idx])] == word[w_idx] :
babbling[bb_idx] = babbling[bb_idx][len(word[w_idx]) :]
prev = word[w_idx]
w_idx = -1
w_idx += 1
if len(babbling[bb_idx]) == 0 :
answer += 1
return answer
단순한 if ~ else 구조라면, 삼항연산자의 사용을 추천한다.
C++ 삼항연산 : (조건) ? (조건이 맞다면 해야하는 동작) : (조건이 틀리다면 해야하는 동작); 의 꼴로, 한줄짜리의 조건문들을 줄이는데 너무 좋다.
개인적으로 파이썬이 문제푸는데 정말 편한 언어라고 생각하지만, 삼항연산자 형태는 아직도 익숙치가 않다.
python 삼항연산 : (조건이 맞다면 해야하는 동작) if (조건) else (조건이 틀리다면 해야하는 동작)
728x90
'Algorithm > PS' 카테고리의 다른 글
[C++, python] 프로그래머스 - 카드 뭉치 (0) | 2023.02.26 |
---|---|
[C++, python] 프로그래머스 - 문자열 나누기 (0) | 2023.02.26 |
[C++, python] 프로그래머스 - 기사단원의 무기 (0) | 2023.02.25 |
[C++, python] 프로그래머스 - 숫자 짝궁 (0) | 2023.02.25 |
[C++, python] 프로그래머스 - 명예의 전당(1) (0) | 2023.02.25 |