알고리즘/백준
[백준 10773]- 제로- JAVA [스택사용]
놀이방사장님
2024. 1. 13. 23:49
728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은 백준 10773
"제로" 입니다.
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
문제를 보면 재현이 참 착한데 뭐라하기 좀 그런 친구네요
문제를 설명하자면 첫번째 줄은 입력받아야 하는 갯수입니다.
여기서 0이 나오면 앞에 수는 무효가 되는 겁니다
생각을 해봤는데 이 문제는 딱 스택 자료구조를 이용하면 될 거 같아서 밑에처럼 코드를 구현했습니다.
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 Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int sum = 0;
Stack<Integer> coin = new Stack<>();
for(int i=0; i<n; i++){
int value = Integer.parseInt(br.readLine());
if( !coin.isEmpty() && value == 0){
coin.pop();
}else{
coin.push(value);
}
}
while(!coin.isEmpty()){
sum += coin.pop();
}
System.out.println(sum);
bw.flush();
bw.close();
}
}
위에서 말한 로직은
for(int i=0; i<n; i++){
int value = Integer.parseInt(br.readLine());
if( !coin.isEmpty() && value == 0){
coin.pop();
}else{
coin.push(value);
}
}
해당 부분은에 n갯수만큼 반복문을 돌리는데 먼저 0이 들어오면 스택이 비었는지 확인을 하고 비어있지 않을 경우 스택에서 값을 하나 빼줍니다.
그 후에 스택에서 남아있는 숫자를 다 더해주면 결과가 나옵니다
while(!coin.isEmpty()){
sum += coin.pop();
}
궁금하신 점이 있으시면 댓글 남겨주세요!
감사합니다.
반응형