팡세영
Log sey
팡세영
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • PS (45)
      • programmers (13)
      • 백준 (29)
    • Android (16)
    • Daily (0)
    • Kotlin (6)
    • Design Pattern (1)
    • Java (1)
    • Flutter (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • binding
  • java
  • 완전탐색
  • 의존성 주입
  • programmers
  • BFS
  • 백준
  • CustomView
  • 프로그래머스
  • 안드로이드
  • 실버
  • 자바
  • 코틀린
  • 골드
  • ArcitecturePattern
  • TestCode
  • 구현
  • 이분탐색
  • compose
  • flutter
  • 해쉬맵
  • programmers #프로그래머스
  • 문자열
  • DFS
  • mvvm
  • 하단네비게이션바
  • Kotlin
  • LEVEL2
  • Android
  • 정렬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
팡세영

Log sey

백준 - 연속합 1912 java
PS/백준

백준 - 연속합 1912 java

2023. 3. 6. 00:23


https://www.acmicpc.net/problem/1912

 

1912번: 연속합

첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

www.acmicpc.net


[문제 접근]

  • input으로 주어진 값이 너무 커서 완전 탐색으로 접근하게되면 시간 복잡도가 어마어마 해질거 같았습니다.
  • 그래서 dp 메모제이션으로 문제 접근을 해봤습니다.
  • 우선 저는 연속된 수를 골랐을 때, 연속된 수를 고르지 않았을 때 두 가지 경우로 나누어서 생각했는데요
  • dp[i] 배열에는 i번째 수에서 최대로 만들 수 있는 값을 저장하면 점화식은 아래와 같아집니다.
  • dp[i] = Math.max(dp[i]-1 + arr[i], arr[i])
  • dp[i-1]  + arr[i]는 연속된 수를 골랐을 때, arr[i]는 연속된 수를 고르지 않았을 때 입니다.
  • 이렇게 각 i번째 dp 배열에는 최대로 만들 수 있는 값을 저장하고 dp배열에 갱신된 최대 값을 출력해주면 됩니다.

[java]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int arr[] = new int[n];
        int dp[] = new int[n];

        String input[] = br.readLine().split(" ");
        for(int i=0; i<input.length; i++) arr[i] = Integer.parseInt(input[i]);

        dp[0] = arr[0];

        int ans = dp[0];
        for(int i=1; i<n; i++){
            dp[i] = Math.max(dp[i-1] + arr[i], arr[i]);
            ans = Math.max(ans, dp[i]);
        }

        System.out.println(ans);

    }
}

'PS > 백준' 카테고리의 다른 글

백준 - Packet Routing 6951 java  (0) 2023.03.09
백준 - 친구비 16562  (1) 2023.03.08
백준 - 문자열 집합 조합하기 25328  (0) 2023.03.03
백준 - 캠프 준비 16938  (0) 2023.03.01
[백준] - 도영이가 만든 맛있는 음식 2691  (0) 2023.02.28
    'PS/백준' 카테고리의 다른 글
    • 백준 - Packet Routing 6951 java
    • 백준 - 친구비 16562
    • 백준 - 문자열 집합 조합하기 25328
    • 백준 - 캠프 준비 16938
    팡세영
    팡세영
    Android, CS, PS

    티스토리툴바