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
'알고리즘 스터디' 카테고리의 다른 글
[Programmers] 택배상자 - Javascript (0) | 2023.11.02 |
---|---|
[Programmers] 연속된 부분 수열의 합 - Javascript (1) | 2023.10.30 |
[Programmers] 롤케이크 자르기 -Javascript 번외편<왜 이게 안돼?> (0) | 2023.10.30 |
[Programmers] 과제 진행하기 - Javascript (0) | 2023.10.21 |
[Programmers] 이모티콘 할인행사 - Javascript (0) | 2023.10.16 |