알고리즘/스텍

[백준] 30470 : 호반우가 학교에 지각한 이유 3 (JAVA)

믕비 2025. 4. 2. 10:35
반응형

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

 

[풀이과정]

stack을 사용하였고 max가 갱신될 때마다 stack에 저장된 값들을 확인하면서 길이를 갱신하며 pop, push를 해주었는데 틀림. 로직은 맞는 것 같은데 왜 틀린지 잘 모르겠음.

정답코드는 max 갱신 시마다 값을 확인하는 로직을 없앰. 새로 추가되는 통나무가 항상 제일 긴 통나무이고 max 값을 기준으로 통나무 길이가 갱신되는 것이기 때문에 max값만 저장해준 후 sum 값을 구할 때 로직 실행해켜주면 됨.

 

[코드]

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

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;

    static int N;
    static Stack<Long> stack = new Stack<>();
    static long result;

    public static void main(String[] args) throws IOException {
        init();
        if (!stack.isEmpty()) {
            sum();
        }
        System.out.println(result);
    }

    static void init() throws IOException {
        N = Integer.parseInt(br.readLine());
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            long A = Long.parseLong(st.nextToken());
            long B = Long.parseLong(st.nextToken());

            if (A == 1) {
                addTree(B);
            } else {
                if (!stack.isEmpty()) {
                    magic(B);
                }
            }
        }
    }

    static void addTree(long length) {
        stack.push(length);
    }

    static void magic(long power) {
        long K = stack.pop();
        stack.push(Math.max(K - power, 0)); //max 값 push
    }

    static void sum() {
        long top = stack.peek(); //가장 긴 통나무 길이
        while (!stack.isEmpty()) {
            long now = stack.pop();
            if (now > top) { //더 긴 통나무
                result += top;
            } else if (now < top) {//더 짧은 통나무
                top = now; //기준 길이 갱신
                result += now;
            } else {//길이 같음
                result += now;
            }
        }
    }
}

 

반응형

'알고리즘 > 스텍' 카테고리의 다른 글

[백준] 6198 : 옥상 정원 꾸미기 (JAVA)  (0) 2024.11.01
[백준] 17680 : 막대기  (0) 2023.03.29
[백준] 1874 : 스택수열  (1) 2023.03.24
[백준] 1725 : 히스토그램  (0) 2023.03.24
[백준] 9012 : 괄호  (0) 2023.03.23