처음부터 차근차근
class2 - 10773번 제로 (자바) 본문
반응형
문제 : https://www.acmicpc.net/problem/10773
필자는 해당 문제를 배열로 풀고 정답이라 나왔는데, 다른 사람들 풀이 보니까 stack을 쓰는 사람이 많아서 stack공부도 할겸 업로드하게 되었다.
문제에서 사용하는 개념
Stack 클래스
https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html
함수명 | 반환 형식 | 기능 |
push(item) | void | 스택에 요소 추가. |
pop() | item | 스택의 맨 위 요소를 제거하고 반환 |
peek() | item | 스택의 맨 위 요소를 반환하나, 제거하지 않음. |
empty() | boolean | 스택이 비어 있는지 여부를 반환. 비어있으면 false, 아니면 true |
문제 풀이
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < num; i++) {
int val = Integer.parseInt(br.readLine());
if (val == 0) { // 0이면
stack.pop(); // 값 삭제
}
else {
stack.push(val);
}
}
int sum = 0;
while(!stack.empty()) {
sum += stack.pop();
}
bw.write(String.valueOf(sum) + "\n");
br.close();
bw.flush();
bw.close();
}
catch (IOException e) {
System.out.println("IOException 발생");
}
}
}
자바의 Stack 클래스를 이용한 방법이다.
그리고 아래는 배열을 이용한 방법이다.
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int sum = 0;
Integer[] arr = new Integer[num];
for (int i = 0; i < num; i++) {
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
// 0이면
if (arr[i] == 0) {
// 최신값 삭제
for(int j = i-1; j >= 0; j--) {
if (arr[j] != null) {
sum -= arr[j];
arr[i] = null; // 0을 null로 만들기
arr[j] = null; // 최신값 null로 만들기
break;
}
}
}
}
bw.write(String.valueOf(sum) + "\n");
br.close();
bw.flush();
bw.close();
}
catch (IOException e) {
System.out.println("IOException 발생");
}
}
}
확실히 Stack 클래스를 쓰니까 코드가 깔끔해 진것을 볼 수 있다.
반응형
'알고리즘' 카테고리의 다른 글
class2 - 11650번 좌표 정렬하기 (자바) (0) | 2024.05.23 |
---|---|
class2 - 2775번 부녀회장이 될테야 (자바) (0) | 2024.05.23 |
class2 - 2751번 수 정렬하기2 (자바) (0) | 2024.05.23 |
class2 - 2609번 최대공약수와 최소공배수 (자바) (0) | 2024.05.23 |
class2 - 2108번 통계학 (자바) (0) | 2024.05.22 |
Comments