Algorithm

[프로그래머스 lv1] 옹알이 (2)

09009 2023. 12. 8. 21:02

문제 보기

https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 해결

map과 stack 자료구조를 이용해서 문제를 해결하였다.

1. "aya", "ye", "woo", "ma"를 key로 정하여 map 자료구조에 삽입

String[] word_list = {"aya","ye","woo","ma"};
Map<String, Integer> map = new HashMap<>();
for (String word : word_list) {
    map.put(word, 1);
}

 

2. 단어 하나씩 탐색해서 발음할 수 있는 단어들은 stack에 삽입하고 그 단어의 길이만큼 길이를 제거한다.

연속해서 같은 발음은 하지 못하니까 stack에 원소가 있을 경우, stack에 가장 최근에 들어간 단어와 현재 단어가 일치한다면 stack에 넣지 못하도록 설정하였다.

for (String word : babbling) {
    String str = "";
    Stack<String> stack = new Stack<>();
    int length = word.length();
    for (int i=0; i<word.length(); i++) {
        str += word.substring(i, i+1);
        if (map.containsKey(str)) {
            if ((stack.size() == 0) || (stack.size() >= 1 && !str.equals(stack.get(stack.size()-1)))) {
                stack.push(str);
                length -= str.length();
                str = "";                        
            }
        }
    }

 

3. 모든 길이가 없어졌으면 (길이가 0이면) 발음할 수 있는 단어로 가정함.

if (length == 0) {
    answer++;
}

 

 

 

소스 코드 (최종 답안)

// https://school.programmers.co.kr/learn/courses/30/lessons/133499
import java.util.*;
class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        
        String[] word_list = {"aya","ye","woo","ma"};
        Map<String, Integer> map = new HashMap<>();
        for (String word : word_list) {
            map.put(word, 1);
        }
        
        for (String word : babbling) {
            String str = "";
            Stack<String> stack = new Stack<>();
            int length = word.length();
            for (int i=0; i<word.length(); i++) {
                str += word.substring(i, i+1);
                if (map.containsKey(str)) {
                    if ((stack.size() == 0) || (stack.size() >= 1 && !str.equals(stack.get(stack.size()-1)))) {
                        stack.push(str);
                        length -= str.length();
                        str = "";                        
                    }
                }
            }
            if (length == 0) {
                answer++;
            }
        }
        
        
        return answer;
    }
}

 

댓글수0