렝무식
[백준 10773번] 제로 (JAVA) 본문
BOJ - [10773] 제로
🖍 숫자를 저장하고 0을 부르면 이전 숫자를 지운다. 이후에 숫자들을 합한 값을 출력하는 문제
(link) 10773 제로
[풀이 과정]
스택을 사용하는 문제다. 스택은 대표적인 후입선출(LIFO) 자료구조이므로 해당 문제를 아주 쉽게 해결할 수 있다.
0이 아닌 수를 부르면 그대로 저장하고, 0을 부르면 저장하지 않고 스택 맨 위에 있는 값을 빼는 식으로 진행한다.
그렇게 수가 걸러지면 stack에는 유효한 숫자들만 남아있게 된다.
스택 최상단 값을 반환하는 peek와 스택 최상단 값을 삭제하는 pop 메소드로 차례차례 스택에서 값을 꺼내 값을 합하면 되겠다.
[Pseudocode]
1. stack 선언
2. 테스트 케이스 개수 k 선언
3. stack에 저장할 정수형 변수 num과 num들의 합 sum 선언
4. for i=0 부터 k까지 반복
5. num에 숫자 입력
6. if num=0
7. stack에서 pop
8. else
9. stack에 num push
10. while stack이 빌 때까지 반복
11. sum += stack에서 peek
12. stack.pop
[Code]
import java.util.*;
/**
* 백준 10773번
* 제로
* 분류 : 구현, 자료 구조, 문자열, 스택
*/
public class Problem13 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Stack<Integer> stack = new Stack<>();
int k = input.nextInt(); // 테스트 케이스 개수
int num;
int sum = 0;
for(int i=0 ; i<k ; i++) {
num = input.nextInt();
if(num == 0) // 0을 부를시 최근 숫자를 지운다 (stack에서 pop)
stack.pop();
else // 0이 아닌 수면 해당 숫자를 쓴다 (stack에서 push)
stack.push(num);
}
while (!stack.empty()) { // stack에서 남은 수들을 빼면서 합산
sum += stack.peek();
stack.pop();
}
System.out.println(sum);
input.close();
}
}
[Result]
(2021.07.26 풀이분)
스택이라는 자료구조만 알고 있다면 정말 쉽게 풀리는 문제다.
하지만 모른다면 어떻게 풀어야 할지 난감하겠지.. 그래서 실버4 준건가 싶기도 하고.. (알면 브론즈 수준인데)
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 2581번] 소수 (JAVA) (1) | 2023.01.13 |
---|---|
[백준 17478번] 재귀함수가 뭔가요? (JAVA) (0) | 2023.01.13 |
[백준 10872번] 팩토리얼 (JAVA) (1) | 2023.01.13 |
[백준 10829번] 이진수 변환 (JAVA) (0) | 2023.01.13 |
[백준 4153번] 직각삼각형 (JAVA) (0) | 2023.01.12 |