업데이트:

문제 링크

[백준] 25214번 - 크림 파스타 (Silver 4)

문제 설명

길이 N인 수열 A가 주어져 있다.
$k = 0, \cdots, N - 1$에 대해 $\textrm{max} \lbrace (A_j - A_i) \vert 1 \leq i \leq j \leq k \rbrace$ 값을 순서대로 출력한다.

정답 코드 및 설명

$A_j - A_i$값이 k에서 k+1로 넘어갈 때 바뀔 수 있는 경우가 무엇인지 생각해보자.
$A_{k+1} - A_i \left(0 \leq i \leq k\right)$ 중 가장 큰 값은 $A_i$가 가장 작을 때이고, 이 값이 기존의 값보다 크면 바꿔주면 된다.
$A_i$의 최소값을 계속해서 사용하게 되므로, 정답과 별개로 이를 따로 저장한다.
아래 코드에서는 최소값의 인덱스를 저장하였으나, 값으로 저장해도 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ25214 {
    int n, ans, minIndex, currI, currJ;
    int[] arr;

    void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        arr = new int[n];
        StringBuilder sb = new StringBuilder();
        ans = minIndex = currI = currJ = 0;
        for (int j = 0; j < n; j++) {
            arr[j] = Integer.parseInt(st.nextToken());
            if (arr[j] < arr[minIndex]) minIndex = j;
            if (arr[j] - arr[minIndex] > ans) {
                currJ = j;
                currI = minIndex;
                ans = arr[currJ] - arr[currI];
            }
            sb.append(ans).append(' ');
        }
        System.out.println(sb);
    }

    public static void main(String[] args) throws IOException {
        new BOJ25214().solution();
    }
}

태그: ,

카테고리:

업데이트:

댓글남기기