
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
https://www.acmicpc.net/problem/21921
이 문제는 최대 방문자 수와 해당 일 수가 몇 일인지를 구하는 문제입니다.
- 누적합으로 방문자 수의 증가량을 구한다.
- 처음 비교할 x일 동안 방문한 최대 수를 pSum의 x번째 배열로 잡고
- 반복문을 통해 총 합에서 그 값을 뺀 만큼 더한 값이 크다면 최대 방문자 수일테니 maxCnt를 1로 초기화한다.
- 반복을 돌다 totalSum과 sum이 같다는 것은 최대 방문자 수와 해당 일자의 x일 만큼 수 방문자 수가 일치하다는 것이니 maxCnt를 하나 늘린다.
- totalSum이 0이라면 그것은 n일 만큼 방문자 수가 없을테니
SAD를 출력하고 아니라면 totalSum과 maxCnt를 출력한다.
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
fun nextInt() : Int {
nextToken()
return nval.toInt()
}
val n = nextInt(); val x = nextInt()
val pSum = IntArray(n+1){ 0 }
repeat(n){
pSum[it+1] = pSum[it] + nextInt()
}
var totalSum = pSum[x]
var maxCnt = 0
for (i in x .. n) {
val sum = pSum[i] - pSum[i-x]
if (totalSum < sum){
totalSum = sum
maxCnt = 1
} else if (totalSum == sum) {
maxCnt++
}
}
if (totalSum == 0) {
println("SAD")
} else {
println(totalSum)
println(maxCnt)
}
}