[프로그래머스 / Java] 연속 펄스 부분 수열의 합

2024. 11. 26. 23:06·CodingTest/Algorithm

1. 문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 요약]

  • 부분 수열의 합 중 가장 큰 값을 구하라

 

2. 생각

1. 코딩테스트는 두 가지 유형이 있지
문제가 길어 문제가 요구하는 방향을 이해하면 풀 수 있는 문제와
문제가 짧어 뭘 구하라는지 알겠는데 어떻게 구해? 하는 문제
이 문제는 후자의 경우... 문제 보자마자 든 생각: 뭐 어떻게 구해?


2. 펄스 수열 이용해서 2개의 배열 만드는 것까지는 쉬움


3. "수열의 부분 수열의 최댓값" 이거 구하는게 관건같은데...

하나씩 다 만들어보기에는 sequence의 길이 제한이 커서 안될꺼같다


4. 30분정도 고민해보고 인터넷 찾아봤는데 이미 "카데인 알고리즘"이라고 만들어져(?)있음


5. 오늘도 하나 배웠다.

 

3. 코드

class Solution {
    public long solution(int[] sequence) {
        int n = sequence.length;
        
        int[] pulse1 = new int[n];
        int[] pulse2 = new int[n];
        
        for(int i = 0; i < n; i++) {
            pulse1[i] = sequence[i] * (i % 2 == 0 ? 1 : -1);
            pulse2[i] = sequence[i] * (i % 2 == 0 ? -1 : 1);
        }
        
        long max1 = kadane(pulse1);
        long max2 = kadane(pulse2);
        
        return Math.max(max1, max2);
    }
    
    private long kadane(int[] sequence) {
        long maxSum = sequence[0];
        long currentSum = sequence[0];
        
        for(int i = 1; i < sequence.length; i++) {
            // 현재까지의 합 계속 갱신(시작 갱신)
            currentSum = Math.max(sequence[i], currentSum + sequence[i]);
            
            // 전체 최대값 갱신
            maxSum = Math.max(maxSum, currentSum);
        }
        
        return maxSum;
    }
}
저작자표시 (새창열림)
'CodingTest/Algorithm' 카테고리의 다른 글
  • [Java] 스택(Stack)이랑 큐(Queue)가 뭔데? + 코딩테스트 문제
  • [Java / 알고리즘] 탐욕 알고리즘(그리드 알고리즘)
  • [Java / 알고리즘] 그래프 알고리즘 BFS와 DFS
  • [Java / 알고리즘] 탐색 알고리즘. 순차 탐색(선형 탐색), 이진 탐색
마볼링
마볼링
개발과 게임에 관한 내용을 읽기 쉽게 정리합니다.
  • 마볼링
    게임을 좋아하는 개발자의 블로그
    마볼링
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Project
        • LOATODO
        • 인스타그램 클론코딩(중단)
      • Language
        • Java
        • PHP
        • Javascript
      • Framework & Library
        • Spring
        • Vue
      • Computer Science
        • Web
        • Linux
      • CodingTest
        • Algorithm
        • Kotlin으로 푼 코딩 테스트
        • Java로 푼 코딩 테스트
        • Sorting & Thinking
        • BFS
      • 책&강의 정리
      • 정보처리기사
      • 개인
        • 팰월드(PALWORLD)
        • 마인크래프트
  • 블로그 메뉴

    • 링크

      • GitHub
      • Threads
    • 공지사항

    • 인기 글

    • 태그

      이터널 모드
      php
      네트워크
      로아투두
      Database
      error
      오블완
      CS
      springboot
      운영체제
      아크 서바이벌
      JPA
      티스토리챌린지
      LoaTodo
      프로그래머스
      codingtest
      Spring
      java
      jsp
      코딩테스트
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.1
    마볼링
    [프로그래머스 / Java] 연속 펄스 부분 수열의 합
    상단으로

    티스토리툴바