👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131701
👊 도전
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. 설명
- 원형 배열을 순회해야하므로 배열을 두 배로 늘린다
- 두 배로 늘려서 slice할 때 런타임 에러가 떨어지지 않게 한다.
- 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를 리턴한다.