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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sggnology

하늘속에서IT

Algorithm/Programmers

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

2023. 4. 30. 22:53
728x90

풀이

/**
 * 설명
 * - 투 포인터 알고리즘을 사용하여 문제를 풀이하였다.
 * - 투 포인터 알고리즘은, 구간합을 구할 때 사용한다.
 * */
class 연속된_부분_수열의_합 {
    fun solution(sequence: IntArray, k: Int): IntArray {

        val answerList = mutableListOf<List<Int>>()

        var sum = sequence.first()

        var start = 0
        var end = 0

        val sequenceSize = sequence.size

        while(end < sequenceSize){

            /**
             * 설명
             * - end가 sequenceSize와 같아졌을 때 sum이 k보다 작으면 더 이상 계산할 필요가 없다.
             * */
            if(end == sequenceSize-1){
                if(sum < k){
                    break
                }
            }

            if(sum <= k){
                if(sum == k){
                    answerList.add(listOf(start, end))
                }
                end++

                if(end == sequenceSize){
                    break
                }

                /**
                 * 설명
                 * - 구간 합계에 대한 상태를 매번 구하지 않고, 상태에 따라 다르게 계산한다.
                 * - 아래에서는, end 가 한단계 높아짐으로 구간합에서 높아진 end 인덱스에 값을 더한다.
                 * */
                sum += sequence[end]
            }
            else{
                /**
                 * 설명
                 * - 아래에서는, start 가 한단계 높아짐으로, 구간합에서 높아지기전 start 인덱스의 값을 뺀다.
                 * */
                sum -= sequence[start]
                start++
            }
        }

        return answerList.sortedBy { it[1] - it[0] }.first().toIntArray()
    }
}

출처

 

프로그래머스

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

programmers.co.kr


풀이

 

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

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

github.com

 

728x90

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

프로그래머스 :: 연습문제 :: 무인도 여행  (0) 2023.02.21
프로그래머스 :: 연습문제 :: 뒤에 있는 큰 수 찾기  (0) 2023.02.16
프로그래머스 :: 연습문제 :: 테이블 해시 함수  (0) 2022.12.25
프로그래머스 :: 연습문제 :: 혼자 놀기의 달인  (0) 2022.12.12
프로그래머스 :: 연습문제 :: 점찍기  (0) 2022.12.05
    'Algorithm/Programmers' 카테고리의 다른 글
    • 프로그래머스 :: 연습문제 :: 무인도 여행
    • 프로그래머스 :: 연습문제 :: 뒤에 있는 큰 수 찾기
    • 프로그래머스 :: 연습문제 :: 테이블 해시 함수
    • 프로그래머스 :: 연습문제 :: 혼자 놀기의 달인
    sggnology
    sggnology
    하늘은 파란색이니까 내 삶도 파란색이길 ㅎㅎ

    티스토리툴바