본문 바로가기

JAVA

JAVA(2022.09.09) - Stack,Queue를 활용하는 사고 기르기2

Stack문제 적용 예시를 어제 살펴보았고, 직접 적용해보는 시간을 가졌다.

비교적 쉬운 문제를 선정하였다. 

문제는 백준 10773번이다. 

 

import java.util.Scanner;
import java.util.Stack;

public class MyClass {
    public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      int firstknum = sc.nextInt();
      //1번째 줄 K의 숫자 
      Stack<Integer> stack = new Stack<Integer>();
      
      //K의 줄에 또 숫자가 들어옴
      for(int i=0; i<firstknum; i++){
          int knum = sc.nextInt();
          if(knum == 0){
              stack.pop();
          }
          else{
              stack.add(knum);
          }
      }
      int sum = firstknum;
      while(!stack.isEmpty()){
          int num = stack.pop();
          sum = sum+num;
          //sum이 231넘으면 끝내기 
          if(sum>231){
              break;
          }
      }
      System.out.println(sum);
 
    }
}

Stack을 이용하는 것이 매우 정석적인 풀이로 이어질 수 있게 나온 문제같다. 

for문을 통해 인덱스의 마지막값을 빼주는 형식으로 갈 수 있지만, 그것은 매우 복잡하다. 

그러므로 Stack의 first in - last out 구조를 사용하여 0이 나올 시 마지막 순제를 pop해줄 수 있도록 하였다. 

앞으로는 Stack과 Queue를 더욱 활용한 clean-code를 사용할 것을 지향하기 때문에 더욱 익숙해질 필요성이 있을 것 같다.