본문 바로가기
Computer/Algorithm_Java

[BaekJoon] 10773번 제로 문제풀이 (Success)

by HJ0216 2023. 8. 4.
 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net

 

Language: Java

 

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
35
36
37
38
39
40
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int num = Integer.parseInt(br.readLine());
 
        Stack<Integer> stack = new Stack<>();
        while(num-->0) {
            int i = Integer.parseInt(br.readLine());
            if(i!=0) {
                stack.add(i);
            } else {
                stack.remove(stack.size()-1);
            }
        }
        
        br.close();
        
        int sum = 0;
        
        for(int i=0; i<stack.size(); i++) {
            sum += stack.get(i);
        }
        
        bw.write(sum+"");
        bw.flush();
        bw.close();
    }
 
}
 
 
 

🤔 해설

1. if 조건문

    - 0이 아닌 값이 입력될 때, stack remove 시, stack.size를 활용하여 가장 최근에 입력된 수부터 제거

    (0이 입력될 경우, 지울 수 있는 수가 있다고 보장되어있음)

 

😮 이 외의 풀이

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
35
36
37
38
39
40
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int num = Integer.parseInt(br.readLine());
 
        Stack<Integer> stack = new Stack<>();
        while (num-- > 0) {
            int i = Integer.parseInt(br.readLine());
            if (i != 0) {
                stack.push(i);
            } else {
                stack.pop();
            }
        }
 
        br.close();
 
        int sum = 0;
 
        for (int i : stack) {
            sum += i;
        }
 
        bw.write(sum + "");
        bw.flush();
        bw.close();
    }
 
}
 
 
 

1. Stack 내장 메서드 활용: push(), pop()

2. 향상된 for 반복문

 

 

 

🔗 소스 코드
HJ0216/TIL/BOJ

 

📚 참고 자료

 

[백준] 10773번 : 제로 - JAVA [자바]

www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는

st-lab.tistory.com