Notice
Recent Posts
Recent Comments
Today
Total
04-10 07:49
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Partially Committed

[๋ฐฑ์ค€ 1912] ์—ฐ์†ํ•ฉ (JAVA) ๋ณธ๋ฌธ

๐Ÿ”ฅ Algorithm || ๋ฌธ์ œํ’€์ด/PS

[๋ฐฑ์ค€ 1912] ์—ฐ์†ํ•ฉ (JAVA)

WonderJay 2023. 1. 16. 18:03
728x90
๋ฐ˜์‘ํ˜•
SMALL
์‹œ๊ฐ„ ์ œํ•œ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ œ์ถœ์ •๋‹ต๋งžํžŒ ์‚ฌ๋žŒ์ •๋‹ต ๋น„์œจ
1 ์ดˆ (์ถ”๊ฐ€ ์‹œ๊ฐ„ ์—†์Œ) 128 MB 115866 41697 29399 34.685%

๋ฌธ์ œ

n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ž„์˜์˜ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ์ค‘ ์—ฐ์†๋œ ๋ช‡ ๊ฐœ์˜ ์ˆ˜๋ฅผ ์„ ํƒํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ฉ ์ค‘ ๊ฐ€์žฅ ํฐ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‹จ, ์ˆ˜๋Š” ํ•œ ๊ฐœ ์ด์ƒ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 ์ด๋ผ๋Š” ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜์ž. ์—ฌ๊ธฐ์„œ ์ •๋‹ต์€ 12+21์ธ 33์ด ์ •๋‹ต์ด ๋œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ n(1 โ‰ค n โ‰ค 100,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” -1,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.


N ๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ์ˆ˜์—ด์—์„œ ์—ฐ์†๋œ ํ•ฉ์„ ๊ตฌํ•˜์˜€์„ ๋•Œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ฉ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

dp[i] ๋ฅผ ์‹œ์ž‘์ด ์–ด๋”˜์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ i ๋ฒˆ์งธ ๊นŒ์ง€์˜ ํ•ฉ ์ค‘, ๊ฐ€์žฅ ์ตœ๋Œ€์˜ ๊ฐ’์ด๋ผ๊ณ  ์ •์˜ํ•˜์ž.

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ ํ™”์‹์„ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

dp[ i ] = Max ( dp[i-1] + arr[ i ] , arr[ i ] )

 

๋ง๋กœ ํ’€์–ด์„œ ์„ค๋ช…ํ•˜๋ฉด,

 

i ๋ฒˆ์งธ๊นŒ์ง€์˜ ์ตœ๋Œ€ ํ•ฉ์€

i - 1 ๋ฒˆ์งธ๊นŒ์ง€ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ํ•ฉ์— i ๋ฒˆ์งธ์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’๊ณผ

๊ทธ๋ƒฅ i ๋ฒˆ์งธ ๊ฐ’ ํ•˜๋‚˜๋ฅผ ๋น„๊ตํ•˜์˜€์„ ๋•Œ ๋” ํฐ ์ชฝ์ด๋‹ค.

 

์ด๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ dp table ์„ ์ฑ„์šด ๋’ค, ๊ฐ€์žฅ ์ตœ๋Œ€์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [] arr = new int[n];
        int [] dp = new int[n];
        for(int i = 0 ; i < n ; i++){
            arr[i] = sc.nextInt();
        }
        dp[0] = arr[0];
        for(int i = 1 ; i < n ; i++){
            dp[i] = Math.max(dp[i-1]+arr[i], arr[i]);
        }
        int ans = dp[0];
        for(int i = 1 ; i < n; i ++){
            ans = Math.max(ans, dp[i]);
        }
        System.out.println(ans);
    }
}

 

 

 

728x90
๋ฐ˜์‘ํ˜•
LIST