TIL/알고리즘 공부

프로그래머스 Lv. 2 Swift 알고리즘 - 연속 부분 수열 합의 개수

여의도사노비 2023. 1. 16. 19:52
728x90

주말동안 너무 술을 많이 마셔서 아직도 속이 안좋다.

당분간 소주는 입에도 안댈듯... 초록병 제대로 걸렸다...

 

이 문제는 순서를 고려하여 모든 값을 다 더해준뒤 중복값만 없애주면 된다.

물론 Swift는 Set 배열이 있기에 이를 이용하여 중복값을 편하게 제거할 수 있다.

 

 

이 문제를 풀면서 생각한 논리적 흐름

  1. Set 배열인 ans를 선언해준다.
  2. [i] 번째 원소부터 [j]번째 값, [j]번째 값 + [j+1]번째 값... 이렇게 누적하여 값을 Set에 넣어준다.
  3. idx의 범위 오류를 막기 위해 elements.count로 나누어준다.
  4. 이때 발생하는 나머지 값은 결국 더해줘도 기존 값들에 포함되어 있기 때문에 Set의 자동중복에서 걸린다.
  5. 이렇게 끝까지 차례대로 다 더해주면 끝

 

 

* 코드

import Foundation

func solution(_ elements:[Int]) -> Int {
    var ans: Set<Int> = []

    for i in 0..<elements.count {
        var value = 0

        for j in 0..<elements.count {
            let idx = (i + j) % elements.count
            value += elements[idx]
            ans.insert(value)
        }
    }
    return ans.count
}
 
 

정리(Today I Learned)

  1. 없음