[JAVA] 백준 10773번 : 제로

조예빈·2024년 6월 15일
0

Coding Test

목록 보기
8/138

https://www.acmicpc.net/problem/10773
이 문제는 스택을 사용하는 문제이다.

Stack(스택)

  • LIFO(Last In First Out)
  • 나중에 들어간 것이 먼저 나옴
  • 입구와 출구 모두 하나
  • 쌓여있는 팬케이크라고 생각하면 편함. 맨 위에 있는 팬케이크 부터 먹기 때문

push

  • 스택의 top에 값을 삽입하는 것
Stack<String> stack = new Stack<String>();
stack.push("one");
stack.push("two");
stack.push("three");
System.out.println(stack.toString());

// 출력
[one, two, three]

pop

  • 스택의 top을 반환한 후 삭제
System.out.println(stack.pop());
System.out.println(stack.toString());

// 출력
three
[one, two]

peek

  • 스택의 top 값 조회
  • 삭제는 안함
// 현재 스택 값 : [one, two]
System.out.println(stack.peek());
System.out.println(stack.toString());

// 출력
two
[one, two]

정답 코드

여기서 초반에는 들어오는 값을 무조건 넣는 로직을 작성하고 if문을 통하여 0값이면 pop하도록 하였다. 하지만, 이렇게 하면 0을 넣고 0을 빼는 것이므로 소용이 없다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int K = Integer.parseInt(br.readLine());
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < K; i++) {
            int input = Integer.parseInt(br.readLine());
            if (input != 0) {
                stack.push(input);
            }else {
                stack.pop();
            }
        }
        int sum = 0;
        for (int i = 0; i < stack.size(); i++) {
            sum = sum + stack.get(i);
        }
        System.out.println(sum);
        br.close();
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글