티스토리 뷰

Algorithm/Baekjoon

[백준] 10773번 제로(JAVA)

다교이 2022. 7. 25. 00:01

문제

- 재현이와 재민이는 장부 관리 중

- 재현이는 재민이를 도와 돈을 관리하는데, 항상 정신없는 재현이는 돈을 실수로 잘못 부름

- 재현이는 잘못된 수를 부를 때마다 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();
    }
}

'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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday