자료구조와 알고리듬 With Java/[Study] BAEKJOON 프로그래머스 CodeUp LeetCode

Code up 3117 0은 빼!

계란💕 2022. 3. 16. 09:46

  Ex) 정수k가 입력되고 k줄만큼 숫자들이 입력된다. 마지막에 남은 숫자들의 합을 출력한다.

  - stack을 이용하여 양수가 입력되면 push(), 0이 입력되면 pop()

<hide/>
import java.util.Scanner;
interface IStackableZero{
	
	boolean empty();
	void pop();
	void push(int nData);
	int peek();
	void print();
}

public class MinusZero implements IStackableZero{
	

	private int[] mnArray;
	private int mnTop;
	private int mnCapacity;
	
	public MinusZero(int nCapacity) {
		mnArray = new int[nCapacity];
		mnCapacity = nCapacity;
		mnTop = 0;		
	}
	
	public boolean empty() {
		
		return (mnTop == 0);
	}
	
	public void push(int nData) {

		if(true == full()) {
			System.out.println("=====================");
			System.out.println("Stack Overflow!");
			System.out.println();
			return;
		}
		mnArray[mnTop++] = nData;		
	}
	
	public boolean full() {									
		return (mnCapacity == mnTop);
		
	}
	
	public void pop() {
		
		if(true == empty()) {
			System.out.println("Stack Underflow!");
			return;
		}
		--mnTop;
	}
	
	public int peek() {
	
		if(true == empty()) {
			System.out.println("Stack Underflow!");
			return -1;
		}
		return mnArray[mnTop - 1];
	}
	
	public void print() {
		System.out.println("=========stack elements============");
		
		for(int i = 0; i < mnTop; ++i) {
			System.out.printf("%d ", mnArray[i]);
		}
		System.out.println();
	}
	public int Sum() {
		
		int sum = 0;
		
		for(int i = 0; i < mnTop; ++i) {
			sum = sum + mnArray[i];
		}
		return sum;
	}

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		int k = scan.nextInt();
		int nCapacity = k;
		int [] arr = new int[k];
		
		MinusZero mz = new MinusZero(nCapacity);
		
		for(int i = 0; i < k ; ++i){
			
			arr[i] = scan.nextInt();
			
			if(arr[i] == 0 ) {
				mz.pop();
			
			}else {
				mz.push(arr[i]);
			}	
		}		
		System.out.println(mz.Sum());
	}
}

 

  Note) 실행 결과