Algorithm/백준 자바
백준 10773 자바
눈오는1월
2024. 4. 20. 20:42
728x90
<문제>
https://www.acmicpc.net/problem/10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
<풀이>
1. 어떤 접근으로 문제를 접근하려고 했는지
0을 부를 때마다 직전의 적었던 번호를 지워야 한다. 즉 맨 마지막번째 숫자를 가지고 넣고 지우는 행위를 반복하는 문제이다.
LIFO인 Stack을 활용하는 것이 효과적이라고 생각했다. (물론 일반적인 list도 가능하긴 하다)
2. 향상된 for문을 이용해 Stack의 모든 값들을 접근해서 다 더한 값을 구하려고 했다.
2. 문제를 해결하기 위한 기능
1) 0일 때 직전의 숫자를 삭제하는 기능
2) 입력이 끝났을 때 Stack에 남아있는 숫자를 더하는 기능
<코드>
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++) {
int num = Integer.parseInt(br.readLine());
if(num == 0) { // 0일때 직전의 값을 지우는 기능
stack.pop();
}
else {
stack.push(num);
}
}
int sum = 0;
for(int e : stack) { // 스택의 합 구하기
sum += e;
}
System.out.println(sum);
}
}
<후기>
스택은 인덱스로 접근하기 힘들기 때문에 위처럼 향상된 for문을 이용해서 접근했다.
향상된 for문은 Iterator로 접근하기 때문에 각 스택의 값들을 접근할 수 있다.
728x90