[Python] BOJ 2003 - 수들의 합 2
728x90
반응형
https://www.acmicpc.net/problem/2003
# 투 포인터 기초문제이다.
# left, right라는 포인터 두 개를 이용해 진행한다.
1. left를 0, right를 1로 초기 설정하고 num의 첫번째 값이 s이면
ans를 1부터 시작하고 아니면 s는 0으로 시작한다.
2. while문 안에서 left와 right포인터가 모두 N이라면 둘 다 맨 오른쪽(맨 끝)까지 간 것이므로 break
2-1. 만약 현재 s(포인터 사이의 수들의 합)가 M보다 작고 right가 N보다 작은경우 s에 right포인터가
가리키는 값인 num[right]를 넣어주고 right를 1증가시킨다.
2-2. 현재 s가 M보다 크거나 right가 N에 도달한 경우 s에서 num[left]값을 빼준 뒤, left를 1증가시킨다.
2-3. 중간 중간 s가 우리가 찾고자하는 M값과 같아질 경우 ans를 1증가시킨다.
3. 최종적으로 ans 출력
import sys
input = sys.stdin.readline
N, M = map(int,input().split())
num = list(map(int,input().split()))
ans = 0
left, right = 0, 1
s = num[0]
if s == M:
ans += 1
while True:
if left == right == N:
break
if s < M and right < N:
s += num[right]
right += 1
else:
s -= num[left]
left += 1
if s == M:
ans += 1
print(ans)
(solved.ac 티어: 실버 3)
# 전역하고 몇 주 놀았더니 감을 좀 잃은 것 같다.. 다시 열심히 PS하자!
728x90
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 20444 - 색종이와 가위 (0) | 2021.07.26 |
---|---|
[Python] BOJ 14719 - 빗물 (0) | 2021.07.26 |
[Python] BOJ 22114 - 창영이와 점프 (0) | 2021.07.14 |
[Python] BOJ 12761 - 돌다리 (0) | 2021.07.13 |
[Python] BOJ 2110 - 공유기 설치 (0) | 2021.07.09 |
TAGS.