Skip to main content

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();
    }
}
  1. StringBuilder 객체 선언
  2. 반복문으로 str_list의 각 요소를 순하며, String.contains(ex)로 str 포함 여부 확인하기
  3. ex 포함하지 않는 요소만 StringBuilder에 추가해서 이어 붙이기
  4. 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, "");
    }
}

image.png

요구 조건에 부합하지 않는 코드를 짜서 오답처리 되었다. 요구조건은 각 문자열에 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에 넣는 방식으로 코드를 수정했다.