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) 실행 결과
'자료구조와 알고리듬 With Java > [Study] BAEKJOON 프로그래머스 CodeUp LeetCode' 카테고리의 다른 글
Code up 3102 STL stack (0) | 2022.03.18 |
---|---|
Code up 1929 재귀함수 우박수 (3n+1) (reverse) (0) | 2022.03.16 |
Code up 2016 천단위 구분기호 (0) | 2022.03.16 |
Code up 1928 재귀함수 우박수 문제 (basic) (0) | 2022.03.16 |
Code up 1920 재귀함수를 이용한 2진수 변환 (0) | 2022.03.16 |