Algorithm/Programmers(Java)

[프로그래머스/Lv.1] 옹알이 (2)

비망노트 2023. 3. 22. 21:50

문제 설명

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

1 ≤ babbling의 길이 ≤ 100

1 ≤ babbling[i]의 길이 ≤ 30

문자열은 알파벳 소문자로만 이루어져 있습니다.

 

 

입출력 예

babbling result
["aya", "yee", "u", "maa"] 1
["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"] 2

 

입출력 예 설명

예제2번)  "ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"

 

1. 말하고자하는 단어배열인 arr의 각 원소를 strTemp 임시변수에 담는다.

   strTemp = "ayaye"

 

2. 말할 수 있는 단어배열인 possible의 모든 원소를 돌며 strTemp에 존재하는 possible원소를 해당 인덱스번호로 치환한다.

  possible[0] = "aya"  possible[1] = "ye"  이므로 치환과정을 거치면 strTemp는 "01"이라는 문자열로 바뀐다

  "ayaye" -> "01"
  "uuu" -> "uuu"
  "yeye" -> "11"
  "yemawoo" -> "132"
  "ayaayaa" -> "00a"

 

3. 치환 후 strTemp를 try catch구문 안에서 Integer.parseInt(strTemp)로 형변환을 수행한다.

   이때 NumberFormatException예외가 발생한다면 발음 할 수 없는 단어이므로 continue를 수행해 다음단어로 넘어간다.

   arr[1]의 경우 "uuu"인데 치환가능한 문자열이 없으므로 "uuu" 즉 NumberFormatException이 발생하는 단어다.

 

4. arr[2] = "yeye"를 치환하면 "11"이므로 NumberFormatException이 발생하지않는다.

    이제 이 단어가 연속되는 단어를 사용하는지 체크해야하므로 possibleChk 함수를 통해 연속되는 문자 여부를 체크해준다.

    "11"로 치환된 "yeye"는 연속되는 문자를 사용하고있으므로 false를 반환해 발음가능 단어를 카운트하지않는다.

 

5. 연속되는 문자가 없어 true를 반환했다면 머쓱이의 조카가 말할 수 있는 단어로 인식하고 result를 증가시키는 과정을 반복한다.

 

 

 

 

-출처

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