프로그래머스

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

코 밑 2024. 6. 25. 10:51
Contents

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

 

프로그래머스

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

programmers.co.kr

 

문제를 보면 아가가 할 수 있는 옹알이는 정해져있다

그리고 연속된 같은 옹알이는 불가능하지만 옹알이 다음 다른 옹알이는 가능하다

예를 들어보겠다

가능한 옹알이

aya

ayaye

 

불가능한 옹알이

ayaaya

ayaya

ayaye

 

문자열에 아이가 말한 옹알이중 가능한 옹알이의 개수만 반환하면 된다.

// 옹알이2
class Solution {
	public int solution(String[] babbling) {
		int answer = 0;

		String[] bb = { "aya", "ye", "woo", "ma" }; // 가능 옹알이
		String[] nobb = { "ayaaya", "yeye", "woowoo", "mama" }; // 불가능 옹알이

		// 연속 발음 가능 그러나 다른 발음여야 함
		for (int i = 0; i < babbling.length; i++) {
			// 안되는 경우들
			if (babbling[i].contains(nobb[0]) || babbling[i].contains(nobb[1]) || babbling[i].contains(nobb[2])
					|| babbling[i].contains(nobb[3])) {
				continue; // 통과
			}
			// 되는 경우들

			// 가능 옹알이 공백으로 전환
			for (int j = 0; j < bb.length; j++) {
				babbling[i] = babbling[i].replace(bb[j], " ");
			}
			//공백 제거
			babbling[i] = babbling[i].replace(" ", "");
			//모두 제거됐다면 가능한 것들만 있는 것이므로 답임
			if (babbling[i].length() == 0)
				answer++;
		}
		return answer;
	}
}

배열을 선언해 가능한 옹알이와 불가능한 옹알이를 넣어줬다

// 안되는 경우들
			if (babbling[i].contains(nobb[0]) || babbling[i].contains(nobb[1]) || babbling[i].contains(nobb[2])
					|| babbling[i].contains(nobb[3])) {
				continue; // 통과
			}

 

contains 함수를 이용해 불가능한 옹알이가 문자열에 포함되어있는지 확인해보았다

불가능한 옹알이가 포함되어있다면 통과

 

// 되는 경우들

			// 가능 옹알이 공백으로 전환
			for (int j = 0; j < bb.length; j++) {
				babbling[i] = babbling[i].replace(bb[j], " ");
			}
            //공백 제거
			babbling[i] = babbling[i].replace(" ", "");

다음은 가능한 옹알이가 있는지 확인해보았다

replace 함수를 이용해 가능 옹알이가 있다면 " "로 변환해준다

 

다음은 공백이 된 가능 옹알이들을 모두제거해준다

 

마지막으로 문자열의 길이가 0이라면 answer++를 해준다

문자열의 길이가 0이라는 것은 가능옹알이들만 있어서 모두 제거됐다는 뜻

 

만약 문자열이 ayaye였다면?

aya는 제거되고 ye만 남게되고

문자열의 길이는 2가 되므로 조건문이 발생하지 않는다

안농~