[프로그래머스] 옹알이 (1) – 자바


프로그래머스 “옹알이 (1)” 문제 해결과정입니다.

옹알이 (1)

문제설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 “aya”, “ye”, “woo”, “ma” 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 15
  • babbling의 각 문자열에서 “aya”, “ye”, “woo”, “ma”는 각각 최대 한 번씩만 등장합니다.
    • 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 “aya”, “ye”, “woo”, “ma”가 한 번씩만 등장합니다.
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

입출력 예

babblingresult
["aya", "yee", "u", "maa", "wyeoo"]1
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]3

문제 해결과정

프로그래머스 코드

class Solution {
    public int solution(String[] babbling) {
		String[] babySay = {"aya", "ye", "woo", "ma"};
		
		int cnt = 0;
		for(String bab : babbling) {
			for(String say : babySay) {
				if(bab.contains(say)) {
					bab = bab.replaceAll(say, ",");
					if(bab.replaceAll(",", "").isEmpty()) cnt++;		
				}
			}
		}
		return cnt;
    }
}

문제를 풀이해보자면 babySay 배열 안에 있는 문자들의 조합이 babbling 배열 안에 있는 문자열과 같아야 한다. 이때 babySay의 문자열은 한번씩만 사용된다. 라는 문제였다. 먼저 설계 방향성을 babbling 안의 문자열 하나를 babySay의 모든 문자열로 비교하며 존재하면 replactAll로 공백으로 교체해 문자를 제거하는 것이었다. 하지만 이렇게 하면 오류가 발생한다. 중간에 있던 문자열이 제거 되면서 원래는 겹치지 않던 문자열이었지만 왼쪽과 오른쪽에 있던 문자열이 붙으면서 겹치는 문자열로 인식해 제거하는 과정이 발생했다. 이를 방지하기 위해 공백 대신 “,”로 교체해서 만약 교체한 문자열에 “,”가 공백으로 전부 바꿨을 때 비어있으면 cnt를 증가시키도록 작성했다. 이후 성공.

정리

  1. babbling 내부 문자열과 babySay 내부 문자열을 for문으로 babbling의 문자열 하나를 모든 babySay 문자열로 비교하며 겹치는 것 “,”로 교체
  2. 교체한 문자열에서 “,”를 공백으로 교체
  3. 이때 교체한 문자열이 공백이면 cnt 증가.

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.