파이썬 리스트 내포 사용 feat.백준 시간초과

한결·2021년 11월 11일
0

이것저것

목록 보기
4/4

백준 2805번을 풀다가 시간초과가 발생하였습니다.

이진탐색을 사용하여 문제를 풀었는데 시간초과가 발생하는 것으로 봐선 중간에 입력받은 n만큼 반복하여 리스트 요소의 값을 연산하여 더하는 부분에서 시간초과가 발생됐다고 판단됐습니다.

구글링 결과 리스트 내포방식을 사용하면 효과적으로 시간을 줄일 수 있다는 것을 알게되었는데 이에 대한 내용을 정리해보려고 합니다.

다음은 리스트의 요소를 모두 더하는 코드입니다.
일반적인 for문과 if문을 사용하였습니다.


arr = [1, 2, 3, 4, 5]
total = 0

for i in arr:
    if i > 2:
        total += i

리스트의 크기만큼 반복하며 조건에 해당되면 total에 리스트의 값을 누적으로 더해주고 있습니다.
다만 여기서 리스트의 크기가 크게되면 백준에서 시간초과가 발생하게 됩니다.

때문에 이를 좀 더 빠르게 처리 하기위해 '리스트 내포'를 사용했을 때는 다음과 같이 구현할 수 있습니다.

arr = [1, 2, 3, 4, 5]
total = 0

total = sum([i for i in arr if i > 2])

sum([표현식 for i in 리스트 if문]) 을 통해 구현했습니다.

위의 코드 2개 모두 결과는 같으나 리스트 내포를 사용했을 때 더 빠른것을 확인할 수 있었습니다.

리스트 내포는 위에 설명한 것보다 훨씬 다양한 모양으로 구현할 수 있으니 필요에 따라서 변형시키면 될 것 같습니다.

profile
개발

0개의 댓글