
종강하고 너무 오랜만에 다시 푸는 알고리즘!!
다 까먹었지만 다시 처음부터 풀어봅시다~~~
문제 설명
"aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩만 사용한 발음밖에 하지 못하는 조카가 발음할 수 있는 단어의 개수를 return
https://school.programmers.co.kr/learn/courses/30/lessons/120956
문제 풀이법
우선 발음 가능한 단어들을 배열로 담아둔다
babbling[i]에서 발음이 가능한 단어의 총 길이 수를 담기 위한 변수 len 선언
babbling[i]의 총 길이인 변수 total_size 선언
발음은 최대 한 번씩만 사용 가능하니, 각 발음에 대하여 몇 번 사용했는지 알 수 있는 배열 used[4] 선언 해준다
이중 for문을 돌면서 발음이 가능한 단어가 쓰였는지, 그리고 babbling[i] 안에서 발음이 가능한 단어가 있는지 확인한다
babbling[i]안에 발음이 가능한 단어가 있다면, len에 발음 가능한 단어의 크기를 더해주고 babbing[i]에서 확인된 단어를 0으로 치환한다
이때 0으로 치환하지 않고 erase를 사용해 삭제처리를 한다면
"wyeoo"인 경우 원래는 발음이 안되는 단어이지만, 해당 문자열에 들어있는 "ye"를 삭제한다면 남아있는 문자열이 "woo"가 되기에 발음할 수 있는 단어로 처리가 된다
따라서 이를 방지하기 위해 0같은 발음가능한 단어에서 절대 등장하지 않는 문자로 치환해준다
모든 for문을 다 돌았다면 본래 babbling[i]의 크기와 발음 가능한 단어들의 길이를 비교하여 크기가 같다면 awswer에 1을 더해준다
소스 코드
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> babbling) {
int answer = 0;
string str[4] = {"aya", "ye", "woo", "ma"};
for (string tmp : babbling) {
int len = 0;
int total_size = tmp.size();
int used[4] = {0, 0, 0, 0};
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 4; i++) {
if (used[i] == 0) {
int index = tmp.find(str[i], 0);
if (index < tmp.size()) {
tmp.replace(index, str[i].size(), "0");
len += str[i].size();
used[i] = 1;
}
}
}
}
if (len == total_size)
answer++;
}
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 0단계 - 겹치는 선분의 길이 (0) | 2023.12.22 |
---|---|
[프로그래머스] 0단계 - 평행 (0) | 2023.12.20 |
[백준] 10026 적록색약 (0) | 2023.03.17 |
[백준] 7562 나이트의 이동 (0) | 2023.03.13 |
[백준] 1012 유기농 배추 (0) | 2023.03.13 |