현제의 현재이야기
[백준/파이썬] 2003 - 수들의 합2 본문
n, m = map(int,input().split())
arr = list(map(int, input().split()))
left, right = 0, 1
answer = 0
while right <= n and left <= right:
total = sum(arr[left:right])
if total == m:
answer += 1
right += 1
elif total > m:
left += 1
else:
right += 1
print(answer)
나만 몰랐던 슬라이싱에 대한 것들
1. 슬라이싱은 인덱스 에러가 나지 않는다
a = [1, 2, 3]
print(a[0:0])
>> []
a = [1, 2, 3]
print(a[2:4])
>> [3]
a = [1, 2, 3]
print(a[3:10000])
>> []
2. left와 right가 같을 때, left부터 left - 1 까지 탐색이 되기 때문에 빈 리스트가 나온다.
a = [1, 2, 3]
print(a[3:3])
>> []
따라서 문제에서 얘시를 들자면
3 1
1 3 1 >> 입력
------
0 1 -> answer = 1
0 2
1 2
2 2 -> 빈 리스트, not [1]
2 3 -> answer = 2
2 4 -> right > n, while 탈출
------
2 >> 출력
3. 리스트 슬라이싱의 시간 복잡도는 O(k)로 상대적으로 효율적이다. 자주 사용하자
'algorithm' 카테고리의 다른 글
[programmers/그리디] 요격시스템, 단속카메라 (0) | 2023.07.13 |
---|---|
[codetree] 2n개 중에 n개의 숫자를 적절하게 고르기 (0) | 2023.05.09 |
[codetree] 나이트, 안전지대(BFS, DFS) (0) | 2023.02.09 |
[codetree] 행복한 수열 (0) | 2023.02.05 |
[codetree] 떨어지는 1자 블록 (0) | 2023.02.04 |
Comments