[Kotlin/프로그래머스] 코딩테스트 연습 > 연습문제 > 연속 부분 수열 합의 개수

👀 문제

https://school.programmers.co.kr/learn/courses/30/lessons/131701

👊 도전

1. 설계

  1. 문제 설명대로 구현

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
fun solution(elements: IntArray): Int {
val set = elements.toHashSet()
set.add(elements.sum())
val bigArray = elements+elements
for(i in elements.indices) { // 시작점
for(size in 2 until elements.size) { // 길이
val sum = bigArray.slice(IntRange(i, i+size-1)).sum()
set.add(sum)
}
}
return set.size
}
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 원형 배열을 순회해야하므로 배열을 두 배로 늘린다
    • 두 배로 늘려서 slice할 때 런타임 에러가 떨어지지 않게 한다.
  2. 0~n-1까지 시작점을 가지고 2~elements.size-1만큼 길이를 가지는 배열을 잘라 sum을 구한다
    • 길이가 1, n(elements.size)은 배열을 순회하지 않아도 알 수 있으므로 set에 바로 넣어준다.
    • 길이가 2부터 n-1까지는 배열을 잘라서 계산해야 한다. 시작점은 0~n-1까지 가능하다.
    • 이중 for문으로 순회하면서 slice하고, sum을 계산해서 set에 넣어 중복을 제거한다.
    • set.size를 리턴한다.

👏 해결 완료!