Kotlin/Algorithm Problems

<프로그래머스> 연속 부분 수열 합의 개수(Lv.2)

re트 2023. 11. 16. 16:05
728x90

https://github.com/heesoo-park/ForCodeKata/tree/main/%EC%97%B0%EC%86%8D%20%EB%B6%80%EB%B6%84%20%EC%88%98%EC%97%B4%20%ED%95%A9%EC%9D%98%20%EA%B0%9C%EC%88%98

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

 

이 문제는 보자마자 저번에 풀었던 '괄호 회전하기' 문제가 떠올랐다.

진짜 배열값을 옮기지는 않지만 옮기는 효과를 내는 나머지 연산..!!
이제 필요한 건 길이마다의 합을 구하는 거였다.

 


'길이마다 따로 구할 필요가 있나? 그냥 반복문 돌면서 더하는 걸 집합에 넣으면 될 거 같은데...?'

 


 

위의 생각이 번뜩 나서 그냥 시작 인덱스를 정하고 움직이면서 더하고 집합에 넣고를 반복했다.

그랬더니 맞았다...?!

 

해당 방법으로 작성한 코드는 다음과 같다.

class Solution {
    fun solution(elements: IntArray): Int {
        val sumSet = mutableSetOf<Int>()

        for (i in elements.indices) {
            var sum = 0
            for (j in elements.indices) {
                val curIdx = (i + j) % elements.size
                sum += elements[curIdx]
                sumSet += sum
            }
        }

        return sumSet.size
    }
}

 

반응형