내 풀이
class Solution {
fun solution(elements: IntArray): Int {
val answer = mutableSetOf<Int>()
val elements2 = elements + elements
for (i in 1..elements.size) {
for (j in elements.indices) {
var sum = 0
for(k in j until j + i){
sum += elements2[k]
}
answer.add(sum)
}
}
return answer.size
}
}
문제 이해를 먼저 하자면
7,9,1,1,4의 수가 주어지면 순서대로 연속 부분의 수열 합으로 만들 수 있는 겹치지 않는 개수를 구하는 문제이다.
입출력 예시를 순서대로 다시 작성해보면
1. [7,9,1,1,4]
2. [16,10,2,5]
3. [17,11,6,12,20]
4. [13.18,15,21]
5. [22]
배열의 길이만큼 반복하면 된다.
위에 그림말고도 그려봤는데 알 수 있는 점은 원형으로 만들지 않아도
[7,9,1,1,4]를 한 개 더 붙이면 계산을 충분히 할 수 있다.
val elements2 = elements + elements //[7, 9, 1, 1, 4, 7, 9, 1, 1, 4]
3중 for문을 써서 풀었지만 너무 불편하다.
다른 사람의 풀이
class SolutionOther {
fun solution(elements: IntArray): Int {
val doubling = elements+elements
val result = HashSet<Int>()
for (i in 1..elements.size) {
result.addAll((elements.indices).map {
doubling.slice(it until it + i).sum()
})
}
return result.size
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스_Kotlin] 괄호 회전하기 (0) | 2024.04.12 |
---|---|
[프로그래머스_Kotlin] 귤 고르기 (0) | 2024.04.11 |
[프로그래머스_Kotlin] 멀리 뛰기 (1) | 2024.04.08 |
[프로그래머스_Kotlin] N개의 최소공배수 (0) | 2024.04.05 |
[프로그래머스_Kotlin] 예상 대진표 (0) | 2024.04.04 |