https://www.acmicpc.net/problem/2003
[난이도] Silver3
[유형] 투 포인터
[풀이]
값들을 배열에 저장 후 sum과 left index를 의미하는 left 변수를 유지하면서
for문을 돌리면서 sum에 arr[i]를 더해준다.
더해준 뒤 sum이 m보다 크다면 arr[l]을 sum에서 빼주고 l을 1 증가시켜주기를 sum이 m보다 크지 않을때까지 반복한다.
위 과정을 끝낸 뒤 sum==m 이라면 ans에 1을 더해주고 다음으로 넘어간다.
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
var input = readLine().split(' ')
var n = input[0].toInt()
var m = input[1].toInt()
var arr = readLine().split(' ').map{it.toInt()}
var ans=0
var sum=0
var l=0
for(i in 0..arr.size-1) {
sum += arr[i]
if (sum > m) {
while (l < i && sum > m) sum -= arr[l++]
}
if(sum == m) ans++
}
println(ans)
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver3/2003.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Silver2] 4948 : 베르트랑 공준 (Kotlin) (0) | 2021.07.10 |
---|---|
[BOJ/백준][Silver4] 10773 : 제로 (Kotlin) (0) | 2021.07.10 |
[BOJ/백준][Gold5] 6198 : 옥상 정원 꾸미기 (C++) (0) | 2021.06.24 |
[BOJ/백준][Gold5] 2981 : 검문 (C++) (0) | 2021.06.24 |
[BOJ/백준][Gold5] 2228 : 구간 나누기 (C++) (0) | 2021.06.24 |