2024. 3. 13. 10:15ㆍ코딩 테스트/[프로그래머스] Java
문제 설명
문제 풀이
주어진 문자열 내부에 원하는 문자열이 들어있는지 확인하고, 원하는 문자열과 비슷하지만 다른 문자열인지도 확인해야 한다.
포함 유무를 확인하기 위해서는 이전에 string.contains()를 이용해서 참 거짓을 확인할 수 있다.
하지만 예를 들어서 "aya"를 말할 수 있는데, "ayaa"라는 문자열인 경우 count를 올리면 안된다.
따라서..
문자를 하나씩 가져와서 원하는 문자열이 들어있으면 그 부분은 공백으로 대체하고, 나머지 문자열에 대해서 다시 비교하면서 마지막 빈 문자열이 될 때까지 찾아내면 될 것 같다고 생각한다.
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for(String word: babbling){
while(word.length>0){
if((word.contains("aya")) word.replace("aya","");
else if((word.contains("ye")) word.replace("ye","")
}
}
}
return answer;
}
}
근데 이렇게 하나씩 작성을 하던 중, 문득 떠오른 생각이 있다.
포함되는 걸 찾아서 해당 글자를 공백으로 바꿔버리면, 중간에 존재하는 글자가 사라질 수도 있다고 생각했고
그로 인해서 이상한 단어가 결과로 생성될 수 있다고 생각했다.
따라서 contains가 아닌 startsWith 함수를 사용하기로 하였다.
class Solution {
public int solution(String[] babbling) {
int answer = 0;
int count = 4;
for(String word: babbling){
while(count>0){
if(word.startsWith("aya")) word = word.substring(3);
else if(word.startsWith("ye")) word =word.substring(2);
else if(word.startsWith("woo")) word =word.substring(3);
else if(word.startsWith("ma")) word =word.substring(2);
count--;
if(word.length() != 0){
System.out.println(word);
break;
}else if(word.length() == 0){
answer += 1;
break;
}
}
}
return answer;
}
}
또 이렇게 작성하다가 이런 생각이 들었다!!!
생각해보니 저번에 공부했던 자바의 String에 대해서..
String은 수정 불가능한 객체이다!! 기존의 word를 내가 수정할 수 없던 것이다 ....!
그렇다면.. 어떻게 word를 가지고 문제를 해결해나갈 수 있을까?
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for (String word : babbling) {
int count=4;
StringBuilder str = new StringBuilder(word);
while (count >= 0) {
if (str.toString().startsWith("aya")) str.delete(0, 3);
else if (str.toString().startsWith("ye")) str.delete(0, 2);
else if (str.toString().startsWith("woo")) str.delete(0, 3);
else if (str.toString().startsWith("ma")) str.delete(0, 2);
count--;
if (str.length() == 0){answer++; break;}
else if(count==0 & str.length()!=0) break;
}
}
return answer;
}
}
수정 가능한 객체인 StringBuilder를 사용한 다음, 문자열을 비교할 땐 String에 있는 메소드를 사용하고자
toString() 을 사용하였다.
즉, 수정이 필요한 곳에서만 StringBuilder 객체를 사용하여 진행하였다!
근데 다른 사람 풀이를 보던 도중, replace를 사용해서 string의 하나의 index는 바꾸어질 수 있다는 것을 보았다!
수정 불가능하다는 것이 제대로 어느 정도의 수정인지 더 자세히 알아보아야 겠다.
'코딩 테스트 > [프로그래머스] Java' 카테고리의 다른 글
[코딩테스트연습] 코딩테스트 입문 > Lv.0 양꼬치 (0) | 2024.03.13 |
---|---|
[코딩테스트연습] 코딩테스트 입문 > Lv.0 아이스 아메리카노 (0) | 2024.03.13 |
[코딩테스트연습] 코딩 기초 트레이닝 > Lv.0 주사위 게임3 (0) | 2024.03.10 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 겹치는 선분의 길이 (0) | 2024.03.09 |
[코딩테스트연습] 코딩 기초 트레이닝 > Lv.0 정수를 나선형으로 배치하기 (0) | 2024.03.09 |