sggnology
하늘속에서IT
sggnology
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • Algorithm (31)
      • Programmers (27)
      • Baekjoon (4)
    • WIKI (4)
      • VirtualBox (1)
      • Power Toys (1)
    • NodeJS (4)
      • nvm (1)
      • React (1)
      • Vue (1)
    • Dev Language (3)
      • Java (2)
      • Kotlin (1)
    • Spring Boot (17)
      • Gradle (1)
      • JPA (3)
    • DB (4)
      • MariaDB (3)
      • Redis (0)
    • Android (6)
      • Debug (3)
    • Nginx (3)
      • Debug (1)
    • Intellij (0)
    • Network (1)
    • Git (2)
      • GitHub (2)
    • Chrome Extension (0)
    • ETC (5)
      • Monitoring (2)
    • Linux (1)
      • WSL (1)
    • Visual Studio (1)
    • Side Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 고득점KIT
  • 티스토리챌린지
  • 오블완
  • DB
  • Android Studio
  • mariadb
  • nginx
  • spring boot
  • 레벨3
  • 연습문제
  • 알고리즘
  • java
  • docker
  • 안드로이드 스튜디오
  • JPA
  • 고득점 Kit
  • 백준
  • 레벨2
  • 프로그래머스
  • kotlin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수
Algorithm/Programmers

프로그래머스 :: 연습문제 :: 연속 부분 수열 합의 개수

2022. 11. 18. 17:54
728x90

 

풀이

class 연속_부분_수열_합의_개수 {
    fun solution(elements: IntArray): Int {
        val sequentialSet = mutableSetOf<Int>()

        /**
         * 수도 코드
         *
         * list = [
         *  elements[0], ... , elements[4],
         *  elements[0] + elements[1], ... , elements[4] + elements[0],
         *  ...
         * ]
         * */

        getSolution(sequentialSet, elements)

        return sequentialSet.size
    }

    /**
     * 설명
     * - 회전 수열은 그것의 크기(길이)로 인해 다른 값이 나온다.
     * - 마지막 값은 전체의 합과 동일하기에 모두 같은 값이 됨으로 하나만 계산한다.
     * */
    private fun getSolution(solutionSet: MutableSet<Int>, elements: IntArray){
        for(sequenceLength in 1 until elements.size){
            processSequentialSet(sequenceLength, elements, solutionSet)
        }

        solutionSet.add(elements.sum())
    }

    /**
     * 설명
     * - 회전 수열의 합은 각각의 길이에 따라 다른 합을 가지게 된다.
     * - 예제에서와 같이 길이가 5인 수열을 제외하고 나머지 길이의 수열은 elements 길이만큼 값을 가지게 된다.
     *
     * 특이사항
     * - 수열의 처음과 끝이 붙어있음으로 해당 수열의 크기보다 참조 인덱스 값이 커지면 mod(%) 하여 처리한다.
     *
     * 예시
     * - elements : [1,2,3,4,5]
     * - 길이가 1인 회전수열 : [1,2,3,4,5]
     * - 길이가 2인 회전수열 : [3(1+2), 5(2+3), 7(3+4), 9(4+5), 6(5+1)]
     * - ...
     * - 길이가 5인 회전수열 : [15(1+2+3+4+5)]
     * */
    private fun processSequentialSet(sequenceLength: Int, elements: IntArray, solutionSet: MutableSet<Int>){

        val elementSize = elements.size

        for(index in 0 until elementSize){

            var sum = 0

            for(startIndex in index until (index + sequenceLength)){
                val circularIndex = startIndex % elementSize

                sum += elements[circularIndex]
            }

            solutionSet.add(sum)
        }
    }
}

출처

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이(github)

 

GitHub - sggnology/programmers-algorithm: 프로그래머스 알고리즘 코드 정리입니다.

프로그래머스 알고리즘 코드 정리입니다. Contribute to sggnology/programmers-algorithm development by creating an account on GitHub.

github.com

 

728x90

'Algorithm > Programmers' 카테고리의 다른 글

프로그래머스 :: 연습문제 :: 점찍기  (0) 2022.12.05
프로그래머스 :: 연습문제 :: 귤고르기  (0) 2022.11.25
프로그래머스 :: 연습문제 :: 숫자 카드 나누기  (0) 2022.11.11
Programmers :: 연습문제 :: 우박수열 정적분  (0) 2022.11.07
Programmers :: 고득점 kit :: DFS/BFS :: 단어변환  (2) 2022.10.30
    'Algorithm/Programmers' 카테고리의 다른 글
    • 프로그래머스 :: 연습문제 :: 점찍기
    • 프로그래머스 :: 연습문제 :: 귤고르기
    • 프로그래머스 :: 연습문제 :: 숫자 카드 나누기
    • Programmers :: 연습문제 :: 우박수열 정적분
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바