문제
풀이
투 포인터 알고리즘을 활용하여 해결할 수 있다. 두 개의 포인터 start와 end를 선언하고 초기값을 1과 2로 설정한다. 그리고 start가 end보다 작을 때까지 while문을 실행하며, start부터 end까지의 숫자를 더한 값을 계산한다. 만약 합이 입력받은 값과 같다면 개수를 세어준다. 합이 입력받은 값보다 크다면 start를 움직여 합을 줄이고, 합이 작다면 end를 움직여 합이 크게 해준다.
반복문은 입력받은 숫자의 중간값에서 종료될 것이다. 종료되면 반복문에서 세어준 값에 1을 더한 값을 출력해주는데, 여기서 1은 자기자신만 있는 경우를 포함하기 위함이다.
코드
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val num = br.readLine().toInt()
var cnt = 0
var start = 1
var end = 2
while (start<end) {
var sum = 0
for(i in start .. end) {
sum += i
}
if(sum == num) {
cnt++
}
if(sum > num) {
start++
} else {
end++
}
}
bw.write("${cnt+1}")
bw.flush()
bw.close()
br.close()
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 1806번: 부분합 - Kotlin[코틀린] (0) | 2024.01.15 |
---|---|
[백준] 2047번: 두 용액 - Kotlin[코틀린] (1) | 2024.01.14 |
[백준] 3055번: 탈출 - Kotlin[코틀린] (0) | 2024.01.12 |
[백준] 3273번: 두 수의 합 - Kotlin[코틀린] (0) | 2024.01.11 |
[백준] 1850번: 최대공약수 - Kotlin[코틀린] (0) | 2024.01.07 |