코딩테스트 연습/프로그래머스

배열의 원소 삭제하기

멍멍코 2023. 9. 6. 22:55

문제 설명

정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.

 

제한사항

1 ≤ arr의 길이 ≤ 100
1 ≤ arr의 원소 ≤ 1,000
arr의 원소는 모두 서로 다릅니다.
1 ≤ delete_list의 길이 ≤ 100
1 ≤ delete_list의 원소 ≤ 1,000
delete_list의 원소는 모두 서로 다릅니다.

 

입출력 예

문제 풀이
def solution(arr, delete_list):
    answer = [item for item in arr if item not in delete_list]
    return answer

• 'item for item in arr' : 'arr' 리스트의 각 원소에 대해 반복을 수행합니다. 각 원소는 'item' 변수에 할당됩니다.

'if item not in delete_list' : 조건문입니다. 'item'이 'delete_list'에 포함되지 않는 경우에만 아래의 명령을 수행합니다.

'[...]' : 리스트 컴프리헨션의 결과는 새로운 리스트로 반환됩니다.

• 따라서, 해당 코드는 'arr' 리스트의 원소 중 'delete_list'에 포함되지 않은 원소만을 선택하여 새로운 리스트를 생성하게 됩니다.

리스트 컴프리헨션(list comprehension)

리스트 컴프리헨션은 리스트를 생성하는 간결하고 읽기 쉬운 방법입니다.
Python에서 매우 특징적이고 유용한 기능 중 하나로, 기본 반복문보다 간단하게 리스트를 생성할 수 있습니다.

기본 형식
[expression for item in iterable if condition]​

1. expression: 현재의 'item'에 대한 표현식입니다.
2. iterable: 순회 가능한 객체입니다 (예: 리스트, 튜플, 문자열 등).
3. condition: (optional)리스트에 포함될 아이템을 필터링 하는 조건입니다.

예제
1. 0부터 9까지의 숫자로 구성된 리스트 생성:
numbers = [x for x in range(10)]
print(numbers)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]​

2. 0부터 9까지의 숫자 중 짝수만으로 구성된 리스트 생성:
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]​

3. 각 숫자를 제곱한 값으로 구성된 리스트 생성:

squares = [x*x for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


특징
• 간결함: 일반적인 'for' 루프를 사용한 리스트 생성보다 코드가 간결합니다.
표현력: 조건과 표현식을 조합하여 다양한 리스트를 쉽게 생성할 수 있습니다.

추가적인 정보
리스트 컴프리헨션은 'list'만 생성하는 것이 아닙니다.
'set'과 'dictionary'에 대한 컴프리헨션도 있습니다.

Set 컴프리헨션

unique_evens = {x for x in range(10) if x % 2 == 0}

Dictionary 컴프리헨션

squares_dict = {x: x*x for x in range(5)}
print(squares_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}​

 

하지만, 리스트 컴프리헨션은 복잡한 로직을 구현하기 위해 너무 과도하게 사용될 경우 코드의 가독성을 저해할 수 있으므로 적절하게 사용하는 것이 중요합니다.