728x90
이해하기
테스트케이스는 전부 통과했는데 제출했더니 0점이었던 문제...!
만만하게 봤다가 깜짝 놀랐다 ㅜㅅ
import java.util.*;
class Solution {
public String[] solution(String myStr) {
myStr = myStr.replace("a", " ");
myStr = myStr.replace("b", " ");
myStr = myStr.replace("c", " ");
String[] answer = myStr.trim().split(" ");
if (answer[0].equals("")) {
return new String[]{"EMPTY"};
}
return answer;
}
}
처음에 제출했던 코드는 다음과 같다.
질문하기에서 확인한 반례를 집어넣어보니 그제야 실패.
trim을 해서 괜찮을 줄 아았더니 아니었던 것 같다.
replace로 어떻게 해결해보려 했지만 실패해서 아예 초기화시키고 다시 풀었다.
문제풀이
import java.util.*;
class Solution {
public String[] solution(String myStr) {
List<String> list = new ArrayList<>();
StringBuffer sb = new StringBuffer();
for (char c : myStr.toCharArray()) {
if (c == 'a' || c == 'b' || c == 'c') {
if (!sb.toString().equals("")) {
list.add(sb.toString());
sb.delete(0, sb.length());
}
} else {
sb.append(c);
}
}
if (!sb.toString().equals("")) {
list.add(sb.toString());
}
if (list.size() == 0) {
return new String[]{"EMPTY"};
}
return list.stream().toArray(String[]::new);
}
}
- List와 StringBuffer 선언
- for문을 돌며 char 확인
- 만약 'a', 'b', 'c' 중 하나이고
- sb를 String으로 변환했을 때 "" (공백)이 아니라면
- list에 지금까지 저장했던 sb를 저장해주고
- sb는 전체 delete해서 비워줄 것
- 'a', 'b', 'c' 중 하나가 아니라면
- sb에 해당 char을 append
- 만약 'a', 'b', 'c' 중 하나이고
- for문을 다 돌고나면 마지막 sb를 저장하지 않은 채 끝남
- 마지막 sb도 ""이 아니라면 list에 저장
- 만약 list의 size가 0이라면 저장된 게 없다는 뜻이니 "EMPTY"만 return
- 아니라면 list를 String 배열로 변환 후 return
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.0] 프로그래머스 - 정수를 나선형으로 배치하기 : Java (0) | 2024.04.30 |
---|---|
[Lv.0] 프로그래머스 - 무작위로 K개의 수 뽑기 : Java (0) | 2024.04.30 |
[Lv.0] 프로그래머스 - 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 : Java (0) | 2024.04.30 |
[Lv.1] 프로그래머스 - 시저 암호 : Java (0) | 2024.04.19 |
[Lv.0] 프로그래머스 - 접미사인지 확인하기 (1) | 2024.04.19 |