728x90
문제
https://www.acmicpc.net/problem/10773
3줄 요약
- 스택 사용 이유: 스택은 LIFO(Last In, First Out) 특성으로, 가장 최근에 입력된 숫자를 관리하는 데 적합합니다. 0을 만나면 최근 입력값을 제거할 수 있습니다.
- 속도 측면: 스택의 삽입과 삭제 연산은 O(1) 시간 복잡도를 가지므로, 전체 알고리즘의 시간 복잡도는 O(K)로, 입력 개수 K에 비례하여 효율적으로 처리할 수 있습니다.
- 처리 과정: 입력된 숫자들을 스택에 저장하고 0을 만나면 스택에서 값을 제거하며, 최종적으로 스택에 남은 숫자들의 합을 구하여 출력합니다.
코드
// package boj10773;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// 파일로부터 입력을 읽어오는 코드 (주석 처리 필요 시 주석 해제)
// System.setIn(new FileInputStream("src/input.txt"));
// 표준 입력을 통해 데이터를 읽어옴
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 표준 출력을 통해 데이터를 출력함
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 입력받을 정수의 개수 K
int K = Integer.parseInt(br.readLine());
// 정수를 저장할 스택 생성
Stack<Integer> stack = new Stack<>();
// K개의 정수를 입력받음
for (int i = 0; i < K; i++) {
int val = Integer.parseInt(br.readLine());
if (val == 0) {
// 입력이 0이면 스택에서 가장 최근의 값을 제거
stack.pop();
} else {
// 입력이 0이 아니면 스택에 값을 추가
stack.push(val);
}
}
// 스택에 남아있는 모든 정수의 합을 계산
int sum = 0;
for (Integer v : stack) {
sum += v;
}
// 결과를 출력 버퍼에 저장
bw.write(sum + "");
bw.flush();
// 리소스 해제
br.close();
bw.close();
}
}
'Problem_Solving' 카테고리의 다른 글
백준(BOJ) 11866 : 요세푸스 문제 0 (실버5) / 자바(Java) 풀이 (0) | 2024.05.15 |
---|---|
백준(BOJ) 1874 : 스택 수열 (실버2) / 자바(Java) 풀이 (0) | 2024.05.14 |
백준(BOJ) 4949 : 균형잡힌 세상 (실버4) / 자바(Java) 풀이 (0) | 2024.05.14 |
백준(BOJ) 9012 : 괄호 (실버4) / 자바(Java) 풀이 (0) | 2024.05.14 |
백준(BOJ) 6603 : 로또 (실버3) / 자바(Java) 풀이 (0) | 2024.05.12 |