[프로그래머스] Level 0 옹알이
Level 0 중 가장 정답률이 낮길래 풀어봤다.
문제
태어난 지 6개월밖에 되지 않은 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 이어 붙인 발음밖에 하지 못 한다고 한다. 문자열 배열 babbling이 매개변수로 주어질 때, 조카가 발음할 수 있는 단어의 개수를 return하도록 메서드를 완성하라
나의 답안
class Solution {
public int solution(String[] babbling) {
int answer = 0;
String[] canSay = {"aya", "ye", "woo", "ma"};
String str;
for (int i = 0; i < babbling.length; i++) {
str = babbling[i];
for (int j = 0; j < canSay.length; j++) {
if (str.length() != 0 && str.contains(canSay[j])) {
if (str.equals(babbling[i])) {
str = babbling[i].replaceAll(canSay[j], "-");
} else {
str = str.replaceAll(canSay[j], "-");
}
}
}
if (str.replaceAll("-", "").isEmpty()) {
answer++;
}
}
return answer;
}
}
다른 유저의 답안
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for(int i =0; i < babbling.length; i++) {
babbling[i] = babbling[i].replace("aya", "1");
babbling[i] = babbling[i].replace("woo", "1");
babbling[i] = babbling[i].replace("ye", "1");
babbling[i] = babbling[i].replace("ma", "1"); //해당하는 문자열이 있으면 1로 변환
//replace → replaceFirst 로 변경해야함!
babbling[i] = babbling[i].replace("1", ""); //1을 제거
if(babbling[i].isEmpty()) {
answer = answer + 1;
}
}
return answer;
}
}
- 불필요하게 canSay배열 및 Babbling의 각 항목을 넣기 위한 문자열 변수(str)를 선언하지 않음 (성능, 가독성 ↑)
- for문을 1번만 사용함
- 단, "ayaaya"와 같은 중복이 발생해도 카운트가 된다. 따라서 replace() 대신 첫번째 해당문자만 변경해주는 replaceFirst()를 사용해야 한다!
복습
- 배열의 길이 확인 : arr.length [괄호 사용 X]
- 문자열의 일부를 다른 문자로 변환 : String.replace("기존문자", "바꿀문자")
- 문자열에 특정 문자가 포함되는지 확인 : String.contains("문자")
- 두 값이 같은지 확인 : "문자".equals("문자")