끄적끄적 코딩
article thumbnail

스택 문제입니다.

모든 수를 같은 수로 만드는데 가장 적은 add 사용 회수를 출력해야합니다.

스택이 비어있다면 현재 값을 넣어줍니다.
스택이 차있고, 스택 top값보다 현재값이 크다면 차이만큼 결과값에 더해주고 pop(), push(현재 값)을 해줍니다.
스택이 차있고, 스택 top값보다 현재값이 작다면 pop(), push(현재 값)을 해줍니다.
입력값이 다 들어오면 stack의 값들을 max값과 차를 구해서 결과값에 더해주었습니다.

import java.io.*;
import java.util.*;

public class Main {

  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    StringTokenizer st = new StringTokenizer(br.readLine());

    int n = Integer.parseInt(st.nextToken());
    Stack<Long> stack = new Stack<>();
    long max = 0;
    long result = 0;

    for (int i = 0; i < n; ++i) {
      long num = Long.parseLong(br.readLine());
      max = Math.max(num, max);

      if (stack.isEmpty()) {
        stack.push(num);
      } else {
        if (stack.peek() < num) {
          result += num - stack.pop();
          stack.push(num);
        } else if (stack.peek() > num) {
          stack.pop();
          stack.add(num);
        }
      }
    }
    while (!stack.isEmpty()) {
      result += max - stack.pop();
    }

    bw.write(result + "");
    bw.close();
  }
}

'알고리즘' 카테고리의 다른 글

[Java] 프로그래머스 - 여행경로  (0) 2023.08.21
[Java] 백준 3967번 매직스타  (0) 2023.08.20
[Java] 백준 16434번 드래곤 앤 던전  (0) 2023.08.19
[Java] 백준 1549번 K  (0) 2023.08.09
[Java] 백준 1394번 암호  (0) 2023.08.09

검색 태그