코드
def solution(my_string, letter):
answer = ''
lms = list(my_string)
for i in lms:
if i == letter:
lms.remove(letter)
answer = ''.join(lms)
return answer
my_string에서 letter를 제거하는 문제이다.
my_string이 리스트가 아닌 문자열로 주어지기 때문에 remove를 사용하려고 list로 바꿔 letter를 제거하였다.
하지만 예시는 모두 통과하였으나 제출하면 2개의 테스트 케이스를 통과하지 못하였다.
이전에 올렸던 내용이 생각나 리스트에서 remove를 사용한 게 문제인지 print를 하나씩 찍어보았다.
위 사진은 BCBdbe에서 B를 제거하는 예시이다.
for문에서 i를 출력해보니 B 다음에 B가 출력되는 것을 볼 수 있다.
이는 C를 건너뛰었다는 뜻이고, remove를 하면서 원본 lms에 손상이 가고 있어 발생하는 현상임을 알 수 있었다.
따라서 위 방식으로 문제를 해결하기 위해서는 for문에서 lms를 lms[:]로 바꿔 주어야 원본에는 손상가지 않으면서 lms의 모든 원소를 순차적으로 letter와 같은지 비교할 수 있다.
다른 방법 - 1
def solution(my_string, letter):
answer = ''
for i in my_string:
if i != letter:
answer += i
return answer
letter와 다른 문자열만 answer에 추가하여 결과를 얻을 수도 있다.
다른 방법 - 2
def solution(my_string, letter):
answer = ''
answer = ''.join([i for i in my_string if i not in letter])
return answer
리스트 컴프리헨션을 사용하여 코드를 간결화시킬 수 있다.
첫 번째 방법에서 실패를 계속하여 리스트 컴프리헨션으로도 풀어보았는데, 실제로 해당 문제에서 가장 많은 좋아요를 받고 있는 코드였다.
반응형