알고리즘 스터디
[Programmers] 연속 부분 수열 합의 개수 - Golang
Bono-Dev
2023. 11. 3. 22:12
INDEX


https://school.programmers.co.kr/learn/courses/30/lessons/131701
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Solution
원형으로 이루어진 수열은 사실 쭉 펼쳐진 선형 배열로 생각하면 됩니다.
예제로 주어진 배열 [7, 9, 1, 1, 4] => [7, 9, 1, 1, 4, 7, 9, 1, 1]로 변환한 뒤 길이가 1인 연속 부분 수열, 길이가 2인 연속 부분 수열... 을 구하면 됩니다.
또한 정답은 중복이 허용되지 않는 배열의 크기이므로 Set 구조가 필요합니다.
하지만 Golang 에는 Set 구조가 없기 때문에 Map 을 활용해서 직접 구현해주어야 합니다.
type set map[int]struct{}
func (s set) Add(v int){
s[v] = struct{}{}
}
func (s set) Length() int{
return len(s)
}
이제 반복문을 통해 연속 부분 수열 합의 개수를 구해주면 됩니다.
func solution(elements []int) int {
answer := set {}
elements_ := append(elements, elements[0:len(elements)-1]...) //원형수열을 길게 펼친 모양
for startIdx := 0; startIdx<len(elements); startIdx++ {
sum := 0
for i:=0; i<len(elements); i++{
sum+= elements_[startIdx+i]
answer.Add(sum)
}
}
return answer.Length()
}
전체코드
type set map[int]struct{}
func (s set) Add(v int){
s[v] = struct{}{}
}
func (s set) Length() int{
return len(s)
}
func solution(elements []int) int {
answer := set {}
elements_ := append(elements, elements[0:len(elements)-1]...)
for startIdx := 0; startIdx<len(elements); startIdx++ {
sum := 0
for i:=0; i<len(elements); i++{
sum+= elements_[startIdx+i]
answer.Add(sum)
}
}
return answer.Length()
}
728x90
반응형