본문 바로가기

Python

[Python/level 0] ad 제거하기 - 181870, not in, pop과 remove를 사용하지 않은 이유

문제 설명

문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.

 

not Keyword

  • The not keyword is a logical operator.
  • The return value will be True if the statement(s) are not True, otherwise it will return False.
    • not True -> False
x = False
print(not x) # True

 

code

def solution(strArr):
    answer = []
    for i in strArr:
        if "ad" not in i:
            answer.append(i)
        else:
            continue
    return answer
  • 코드 설명
    • "ad"가 i에 존재하지 않는다면 새로운 배열에 i값 추가
    • 존재한다면 continue(새로운 배열에 값을 추가하지 않음

 

🤔 pop이나 remove 메서드는 왜 안 쓰나요?

  • 위 문제를 해결하기 위해 pop이나 remove 메서드를 사용할 수 있지만, 리스트의 요소를 제거할 때 인덱스가 변경될 수 있기 때문에 주의해야 함
  • 반복문을 사용하여 요소를 제거할 경우, 인덱스 문제로 인해 모든 요소를 제대로 처리하지 못할 수 있음
  • 그럼에도 불구하고 pop(), remove()를 쓰고 싶다면? 인덱스를 직접 관리하자
def solution(strArr):
    i = 0
    while i < len(strArr):
        if "ad" in strArr[i]:
            strArr.remove(strArr[i])
        else:
            i += 1
    return strArr
  • 코드 설명
    • while 루프 문, 인덱스 i를 직접 설정하여 리스트 순회
    • "ad"가 포함되어 있다면 해당 요소 제거
    • 이때 i가 증가되지 않기에 다음 루프에서도 동일한 인덱스에 대해 다시 검사함 (= 인덱스 직접 관리)
    • index는 제거되지 않은 요소(="ad"가 없는 요소)에 대해서만 수행됨

 

반응형