티스토리 뷰
728x90
문제
- 재현이와 재민이는 장부 관리 중
- 재현이는 재민이를 도와 돈을 관리하는데, 항상 정신없는 재현이는 돈을 실수로 잘못 부름
- 재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지움
- 재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 구함
- 수는 0에서 1,000,000 사이의 값을 가짐
해결방법
stack을 이용하여 재현이가 수를 부를 때마다 stack에 집어넣고, 재현이가 0을 부른다면 가장 최근에 넣었던 값을 pop()시켜 꺼내줄 수 있도록 한다. 모든 수를 다 stack에 넣었다면 stack 안에 있는 수들의 합을 구하면 된다.
코드
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>(); // 재현이가 부른 수들을 담을 stack
for(int i = 0; i<K; i++){
int num = Integer.parseInt(br.readLine());
if(num != 0) stack.push(num); // 재현이가 부른 숫자가 0이 아니라면 stack에 넣기
else stack.pop(); // 재현이가 부른 숫자가 0이라면 stack에서 하나 pop()
}
int sum = 0;
int size = stack.size(); // stack의 size를 먼저 구해놓고 for문을 돌아야 함(줄어들면서 for문을 정상적으로 안돌 수도 있음)
for(int i = 0; i<size; i++){
sum += stack.pop(); // stack 내의 숫자들을 다 더해줌
}
System.out.println(sum);
br.close();
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 10816번 숫자 카드 2(JAVA) (0) | 2022.07.28 |
---|---|
[백준] 10814번 나이순 정렬(JAVA) (0) | 2022.07.25 |
[백준] 10250번 ACM 호텔(JAVA) (0) | 2022.07.24 |
[백준] 9012번 괄호(JAVA) (0) | 2022.07.22 |
[백준] 7568번 덩치(JAVA) (0) | 2022.07.22 |
댓글