728x90
반응형
문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 15
- babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
입출력 예
babbling | result |
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
문제 설명
c++
#include <string>
#include <vector>
#include <unordered_set>
using namespace std;
int solution(vector<string> babbling) {
int answer = 0;
unordered_set<string> wordSet = { "aya","ye","woo","ma" };
for(int i = 0; i < babbling.size(); i++)
{
vector<bool> dp(babbling[i].size()+1,false);
// dp[0] 빈문자열이기에 사이즈보다 1개 더 더해야한다.
dp[0] = true; //false이면 다음 단어를 찾아도 if문에서 넘어가지 못함, 빈문자열은 true로 설정해야 함
for(int j = 1; j <= babbling[i].length(); j++)
{
for(int k = 0; k < j; k++)
{
string word = babbling[i].substr(k, j-k);//문자열자르기
//이전 문자열 조합이 true인지, 자른 문자열이 주어진 단어중에 있는지 확인
if(dp[k] && wordSet.find(word) != wordSet.end())
{
dp[j] = true;
break;
}
}
}
if(dp[babbling[i].length()] == true)
{
answer++;
}
}
return answer;
}
자바스크립트
function solution(babbling) {
let answer = 0;
const wordSet = new Set(["aya", "ye", "woo", "ma"]);
for (let i = 0; i < babbling.length; i++) {
let dp = Array(babbling[i].length + 1).fill(false);
dp[0] = true; // 빈 문자열은 항상 true
for (let j = 1; j <= babbling[i].length; j++) {
for (let k = 0; k < j; k++) {
let word = babbling[i].substring(k, j); // 부분 문자열 추출
if (dp[k] && wordSet.has(word)) { // dp[k]가 true이고, 부분 문자열이 단어 목록에 있으면
dp[j] = true;
break;
}
}
}
if (dp[babbling[i].length] === true) {
answer++;
}
}
return answer;
}
동적계획법 dp 배열에 대해 공부했던 문제였다. 문제를 봤을 때 쉬워보이지만 막상 풀어보려니 복잡했다. 위 방법을 알아내고 적용하여 풀어보니 이해가 되었다. 다른 방법도 있었는데, 다른 방법도 다음에는 풀어보고 답을 찾는 속도까지도 비교해보면 좋을 것 같다.
728x90
반응형
'프로그래머스 풀이' 카테고리의 다른 글
[c++]정수 삼각형 (2) | 2024.10.28 |
---|---|
[c++] 이중우선순위큐 (2) | 2024.10.28 |
[c++]같은 숫자는 싫어 (3) | 2024.10.24 |
[c++]최빈값 구하기 (1) | 2024.10.21 |
[c++]중앙값 구하기 (0) | 2024.10.21 |