처음부터 차근차근

class2 - 10773번 제로 (자바) 본문

알고리즘

class2 - 10773번 제로 (자바)

_soyoung 2024. 5. 23. 17:39
반응형

문제 : 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 클래스를 쓰니까 코드가 깔끔해 진것을 볼 수 있다.

반응형
Comments