[프로그래머스 코딩 기초 트레이닝 오답노트] 꼬리문자열

2024. 12. 23. 17:30PYTHON

문제

 

문자열들이 담긴 리스트가 주어졌을 때, 모든 문자열들을 순서대로 합친 문자열을 꼬리 문자열이라고 합니다. 꼬리 문자열을 만들 때 특정 문자열을 포함한 문자열은 제외시키려고 합니다. 예를 들어 문자열 리스트 ["abc", "def", "ghi"]가 있고 문자열 "ef"를 포함한 문자열은 제외하고 꼬리 문자열을 만들면 "abcghi"가 됩니다.

 

문자열 리스트 str_list와 제외하려는 문자열 ex가 주어질 때, str_list에서 ex를 포함한 문자열을 제외하고 만든 꼬리 문자열을 return하도록 solution 함수를 완성해주세요

 

제한사항

 

2 ≤ str_list의 길이 ≤ 10

1 ≤ str_list의 원소의 길이 ≤ 10

1 ≤ ex의 길이 ≤ 5

 

입출력 예

str_list ex result
["abc", "def", "ghi"] "ef" "abcghi"
["abc", "bbc", "cbc"] "c" ""

 

첫번째 풀이 - 오답

def solution(str_list, ex):
    for i in range(len(str_list)):
        if ex in str_list[i]:
            str_list.remove(str_list[i])
    return str_list

 

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[15], line 1
----> 1 solution(["abc", "def", "ghi"], "ef")

Cell In[14], line 3
      1 def solution(str_list, ex):
      2     for i in range(len(str_list)):
----> 3         if ex in str_list[i]:
      4             str_list.remove(str_list[i])
      5     return str_list

IndexError: list index out of range

 

기존 리스트에서 요소를 삭제하는 경우 반복문의 index에서 벗어나는 오류가 발생

str_list = ["abc", "def", "ghi"]
ex = "ef"

# 첫 번째 반복: i = 0
# str_list[0] = "abc", "ef"는 포함되지 않음 -> 패스

# 두 번째 반복: i = 1
# str_list[1] = "def", "ef"를 포함함 -> 제거
# str_list = ["abc", "ghi"]

# 세 번째 반복: i = 2
# 이 시점에서 리스트의 길이가 줄어들었기 때문에 i = 2는 유효하지 않음
# 결과적으로 "ghi"는 검사되지 않고 남음

 

풀이

def solution(str_list, ex):
    answer = []
    for i in range(len(str_list)):
        if ex not in str_list[i]:
            answer.append(str_list[i])
    return ''.join(answer)