2022.12.10. 최초 작성
Lv1.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/133499?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
머쓱이는 태어난 지 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 |
입출력 예 설명
입출력 예 #1
["aya", "yee", "u", "maa"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
입출력 예 #2
["ayaye", "uuuma", "yeye", "yemawoo", "ayaayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye" + "ma" + "woo" = "yemawoo"로 2개입니다. "yeye"는 같은 발음이 연속되므로 발음할 수 없습니다. 따라서 2를 return합니다.
유의사항
네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
[문제분석]
입력정보는 String 배열로 전달된다.
입력정보에서 조카가 옹알이할 수 있는 4가지 발음 외에 다른 발음이 있으면 answer를 카운트하지 않는다.
네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하지 못한다.
[접근 방법]
연속해서 같은 발음을 하는 경우를 먼저 확인하여 카운트에서 제외한다.
입력정보 리스트의 문자열에서 조카가 옹알이할 수 있는 4가지 발음을 다른 특수 문자로 치환한 후 남아 있는 문자열이 없으면 answer로 카운트한다.
문자열 치환에는 replace를 사용한다.
[주의사항]
만약 문자열 치환을 특수 문자가 아닌 비어있는 문자열(“”)로 할 경우는 오류 가능성이 있다.
wyeoo 문자열의 경우 ye를 먼저 비어있는 문자열(“”)로 치환하면 woo가 된다.
남은 woo를 비어있는 문자열(“”)로 치환하면 남는 것이 없어 정상적인 옹알이로 해석될 수 있다.
[풀이 코드]
자바의 String 배열 자료구조와 문자열 치환에 대한 이해가 필요하고 풀이 순서는 아래와 같다.
1. indexOf를 사용하여 연속해서 같은 발음을 하는 경우를 찾는다.
2. replace를 사용하여 문자열을 치환한다. 먼저 가능한 옹알이 발음을 특수 문자로 치환한 후 특수 문자를 다시 비어있는 문자열(“”)로 치환한다.
위 2가지 내용을 별도의 함수로 구현한 후 solution 함수에서 호출하여 사용한다.

[정리]
옹알이(1) 과 비슷하나 조건이 추가되었다. 옹알이(2)는 자바로 만들어보았다.
연속해서 같은 발음을 최소 2번 이상 하는지를 먼저 확인할 필요가 있어서 별도의 함수를 만들었다.
정상적인 옹알이 발음을 구별하는 것은 옹알이(1)에서와 같은 방식으로 처리하였는데 이것도 별도의 함수를 만들었다.
위 2개의 함수는 리턴값을 true 또는 false를 반환하도록 하였고 solution 함수에서 호출하여 사용하는 구조이다.
solution 함수에서 모두 처리하여도 되지만 기능을 분리하여 별도의 함수로 만들어 사용하면 코드의 가독성과 유지보수에 유리한 장점이 있다.
단순히 코드의 길이를 줄이는 것보다 코드가 조금 길어지더라도 함수의 단순화와 그에 따른 가독성 및 유지보수를 생각해본 풀이 방법이다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기 - 파이썬 (1) | 2022.12.18 |
---|---|
[프로그래머스] 문자열 나누기 - 파이썬 (0) | 2022.12.17 |
[프로그래머스] 신고 결과 받기 - 파이썬 (0) | 2022.12.17 |
[프로그래머스] 햄버거만들기 - 파이썬 (1) | 2022.12.06 |
[프로그래머스] 옹알이(1) - 파이썬 (0) | 2022.12.01 |