-
백준 2003 - 수들의 합BOJ-Algorithm 2023. 2. 14. 16:53
https://www.acmicpc.net/problem/2003
2003번: 수들의 합 2
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
www.acmicpc.net
length,value = map(int, input().split()) arr = list(map(int, input().split())) counter = 0 pointer_a = 0 pointer_b = 1 while pointer_a<=pointer_b and pointer_b<=length: if sum(arr[pointer_a:pointer_b])==value: counter+=1 pointer_b+=1 elif sum(arr[pointer_a:pointer_b])<value: pointer_b+=1 else: pointer_a+=1 print(counter)
투 포인터를 어떻게 배분해주냐의 조건이 중요하다.
arr[a:b]의 값이 목표로 하는 value보다 작으면 b의 값을 한 칸 늘려 합계를 구하는 범위를 늘려준다.
arr[a:b]의 값이 목표로 하는 value보다 크면 a의 값을 한 칸 늘려 합계를 구하는 범위를 줄여준다.
arr[a:b]의 값이 목표로 하는 value와 같으면 counter를 하나 늘려주고 b값을 하나 늘려 다음 조건에 합계가 어떻게 바뀌는지 체크하게 해 준다.
'BOJ-Algorithm' 카테고리의 다른 글
백준 1929 - 소수 구하기 (0) 2023.02.17 백준 1269 - 대칭 차집합 (0) 2023.02.13 백준 14425 - 문자열 집합 (0) 2023.02.13 programmers lv2 - 이진 변환 반복하기 (2) 2022.11.14 프로그래머스 lv2 - JadenCase 문자열 만들기 (1) 2022.11.14