백준
[백준][Kotlin] 2018번 수들의 합5
끝까지 처음처럼
2023. 2. 26. 01:19
728x90
해당 문제는 투 포인터의 사용과 합계의 개념을 응용하여 작성 할 수 있는 문제였습니다.
해당 문제의 설명을 보시면 예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다. 라고 설명해 주고 있습니다.
만약 합계 값이 구하려는 값보다 클 경우는 작은 값을 가르키고 있는 인덱스값을 합계값에서 증가시키고, 이전에 가르키고 있던 값을 기존 합계값에서 빼주면 됩니다
ex) 1+2+3 = 6 구하려는 값 5 이라면 2+3 = 5
반대의 경우에는 큰 값을 가르키고 있는 인덱스를 증가 시킨 후 합계값에 더해 주면 됩니다.
ex) 3+4+5 = 12 구하려는 값 18 이라면 3+4+5+6 = 18
하기는 작성한 코드와 제출 결과 입니다.
import java.util.StringTokenizer
fun main() {
var st = StringTokenizer(readln())
val N = st.nextToken().toInt()
var idx1 = 1
var idx2 = 2
var answer = 1
var sum = idx1 + idx2
// val s = System.currentTimeMillis()
while(idx2 <= (N+1)/2 ){
if(sum == N){
answer++
idx2++
sum += idx2
} else if(sum > N){
sum -= idx1
idx1++
} else {
idx2++
sum += idx2
}
}
// val e = System.currentTimeMillis()
println(answer)
// println((e-s)/1000.0)
}