62. [Java] 꼬리 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181841
문자열들이 담긴 리스트가 주어졌을 때, 모든 문자열들을 순서대로 합친 문자열을 꼬리 문자열이라고한다.
꼬리 문자열을 만들 때 특정 문자열을 포함한 문자열은 제외시키려고 한다.
- 문자열 리스트 str_list와 제외하려는 문자열 ex가 주어질 때,
- str_list에서 ex를 포함한 문자열을 제외하고 만든 꼬리 문자열을 return
- 2 ≤ str_list의 길이 ≤ 10
- 1 ≤ str_list의 원소의 길이 ≤ 10
- 1 ≤ ex의 길이 ≤ 5
정답코드
class Solution {
public String solution(String[] str_list, String ex) {
StringBuilder sb = new StringBuilder();
for (String str : str_list) {
if (!str.contains(ex)) {
sb.append(str);
}
}
return sb.toString();
}
}
- StringBuilder 객체 선언
- 반복문으로 str_list의 각 요소를 순하며, String.contains(ex)로 str 포함 여부 확인하기
- ex 포함하지 않는 요소만 StringBuilder에 추가해서 이어 붙이기
- StringBuilder를 String 타입으로 변환해서 return
오답
class Solution {
public String solution(String[] str_list, String ex) {
StringBuilder sb = new StringBuilder();
for (String str : str_list) {
sb.append(str);
}
return sb.toString().replace(ex, "");
}
}
요구 조건에 부합하지 않는 코드를 짜서 오답처리 되었다. 요구조건은 각 문자열에 ex가 포함되어 있지 않은 문자열만 이어 붙이는 것이다. 현재 코드에서 문제점은 다음과 같다.
for (String str : str_list) {
sb.append(str); // 무조건 다 붙임
}
return sb.toString().replace(ex, ""); // 다 붙인 다음 ex 제거
이렇게 하면 예를 들어서 "apple"이라는 문자열이 str_list 안에 있고, ex = "pp"일 때, 원래는 "pp"가 포함된 "apple"은 애초에 제외해야 하지만, 이 코드는 "apple"을 붙인 후, "pp"만 제거해서 "ale"이 나온다. 즉, 부분 문자열만 제거되고, 전체 문자열을 아예 제외하지는 못한다.
그래서 반복문 안에서 각 문자열이 ex를 포함하고 있는지 체크하고, 그렇지 않은 것만 StringBuilder에 넣는 방식으로 코드를 수정했다.