본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 133499번: 옹알이 (2) [Java]

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

 

프로그래머스

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

programmers.co.kr

1. 코드

import java.util.*;
class Solution {
    public int solution(String[] babbling) {
        int answer = 0;
        String[] list = {"aya", "ye", "woo", "ma"};
        for(String s : babbling) {
            StringBuilder sb = new StringBuilder();
            int lastIndex = -1;
            for(char c : s.toCharArray()) {
                sb.append(c);
                for(int i = 0; i < 4; i++) {
                    if(i != lastIndex && list[i].equals(sb.toString())) {
                        sb.delete(0, sb.toString().length());
                        lastIndex = i;
                    }
                }
            }
            if(sb.toString().isBlank())
                answer++;
        }
        return answer;
    }
}

2. 설명

우선 예제를 자세히 살펴보고 문제를 이해하여야 하는데 

  1. "aya", "ye", "woo", "ma" 총 4가지 발음이 가능하다.
  2. 위 4가지 문장의 조합으로 이루어져야한다.
  3. 같은 문장을 연속으로 이어지는 것은 안된다.

위 3가지 조건을 지켜야 조카가 발음할 수 있는 단어로 취급됩니다.

int answer = 0;
String[] list = {"aya", "ye", "woo", "ma"};

단어의 수를 answer, list에는 조카가 발음할 수 있는 4가지로 초기화합니다.

for(String s : babbling) {
    StringBuilder sb = new StringBuilder();
    int lastIndex = -1;
    for(char c : s.toCharArray()) {
        sb.append(c);
        for(int i = 0; i < 4; i++) {
            if(i != lastIndex && list[i].equals(sb.toString())) {
                sb.delete(0, sb.toString().length());
                lastIndex = i;
            }
        }
    }
    if(sb.toString().isBlank())
        answer++;
}

문제를 해결하기 위해서 StringBuilder로 babbling의 문장을 다루며 lastIndex에는 마지막에 어떤 옹알이를 했는지 알기 위함입니다. 만약 마지막으로 발음하지 않은 발음을 정확하게 했다면 StringBuilder에서 제거시키고 lastIndex에 list의 index를 저장합니다. babbling에서 하나의 문장을 전부 읽으면 Stringbuilder에 문장이 남아있지 않다면 조카가 발음할 수 있는 단어이기에 answer를 1 증가시킵니다.

3. 정리

  1. 옹알이의 조건 파악하여 StringBuilder 사용하여 해결
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges