반응형
https://www.acmicpc.net/problem/10773
풀이
문제의 조건은 매우 간단하다.
0이 등장하면 전에 입력받았던 숫자를 지우면 된다.
또한, 0이 등장했을 땐 지울 수 있는 숫자가 있음을 보장했기 때문에 예외 처리를 해줄 필요도 없다.
문제를 푸는 방법은 2가지가 있다.
1. 스택 (Stack) 을 이용하는 방법
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Integer> st = new Stack<>();
for (int i=0; i<N; i++) {
int num = Integer.parseInt(br.readLine());
if (num == 0) { // 제거
st.pop();
} else { // 추가
st.push(num);
}
}
int ans = 0;
for (int i=0; i<st.size(); i++) {
ans += st.get(i);
}
System.out.println(ans);
}
}
자바에서 제공하는 스택 클래스를 이용하면 쉽게 해결할 수 있다. 예외처리도 없어서 그냥 0이 들어오면 pop(), 다른 값이 들어오면 push() 를 해주면 된다.
2. int형 배열을 이용하는 방법 (구현)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int top = -1;
int[] arr = new int[N];
for (int i=0; i<N; i++) {
int num = Integer.parseInt(br.readLine());
if (num == 0) {
top--;
} else {
top++;
arr[top] = num;
}
}
int ans = 0;
for (int i=0; i<=top; i++) {
ans += arr[i];
}
System.out.println(ans);
}
}
해당 문제는 스택 클래스에 대해서 알지 못해도 int형 배열을 스택처럼 활용해서 해결할 수 있다. 들어오는 값에 따라서 인덱스값만 제어해주면 된다. 0이 들어오면 인덱스값을 -1 해준다. 0이 아닌 값이 들어오면 인덱스값을 +1 해주고 값을 넣는다. 주의할 점은 출력하는 부분에서 0부터 인덱스값(top)까지만 출력해야한다.
반응형
'알고리즘 > 구현 & 그리디 & 브루트포스' 카테고리의 다른 글
[백준]JAVA - 17144번: 미세먼지 안녕! (0) | 2022.11.30 |
---|---|
[백준]JAVA - 15683번: 감시 (0) | 2022.11.22 |
[백준]JAVA - 1913번: 달팽이 (0) | 2022.11.20 |
[백준]JAVA - 2503번: 숫자 야구 (0) | 2022.11.15 |
[백준]JAVA - 1034번: 램프 (0) | 2022.11.12 |