BackJoon_25556

위서연·2023년 4월 13일

BackJoon

목록 보기
1/5

백준 포스택 25556 문제

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

public class Main {

  public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int N = sc.nextInt();
      int[] arr = new int[N];
      for (int i = 0; i < N; i++) {
          arr[i] = sc.nextInt();
      }
      // 입력값 모두 변수로 바꿔줌

      Stack<Integer>[] stacks = new Stack[4];
      for (int i = 0; i < 4; i++) {
          stacks[i] = new Stack<>();
          stacks[i].push(0);
      }
		// 만들어야 하는 4개의 스택을 stacks라는 배열로 만들어 준다.
		   다만 만들어둔 스택이 아무 값도 안들어 있을수 있으니 0이라는 값을 넣어준다.
		   emptyStack오류를 방지해준다 --> 실제로 이 오류때문에 많이 헤맸다

      boolean result = true; 
		// 청소 가능여부를 판별해준 boolean형식의 result 변수를 만든다.

      for (int i : arr) {
          boolean inStack = false;
		// 일단 stacks에 arr배열값을 넣어도 될지 여부는 false로 초기화해준다.

          for (int j = 0; j < 4; j++) {
              if (i > stacks[j].peek()) {
                  stacks[j].push(i);
                  inStack = true;
                  break;
              }
          }
		// for문을 돌면서 만약 arr의 i 원소가 stacks[j]의 stack.peek값(가장 위의 값)보다 크다면 
           해당 stacks에 i원소를 더한다. 그리고 false로 초기화 해준 inStack의 값을 true로 바꾼다.

              if (!inStack){
                  result = false;
                  break;
              }
		// 만약 inStack이 불가하다면, result(청소 가능여부) 는 false로 바뀐다.

          }
          System.out.println(result ? "YES" : "NO");
		// result가 true라면 YES를, false라면 NO를 반환해준다.

      }
  }
 <br><br>

👍 내생각
우선 해당 문제는 내가 혼자 힘으로 코드를 짤 수 없을거 같아서 어떻게 구현할지 생각만 해보고 구글링을 통해 해결했다.
내가 생각한 부분은,
① 입력값을 배열로 만들자
② 청소가능 여부를 판단해줄 boolean 변수를 만들자
③ for문으로 입력값 배열을 돌면서, stack의 가장 마지막 값이 입력값 원소보다 작은지 판단하자
요 3가지 정도였고,

4가지 스택을 for문을 통해 배열로 만든 부분은 생각해내지 못했다.
스택을 4개로 모두 stack1, stack2, stack3, stack4로 만들어서 코드를 짜보려고 했는데, 각 스택의 peek를 비교하는 부분에서 for문이 적용되지 않아서 막혔다.

<br><br>

🤔배운내용
1. for문으로 stacks 배열을 만들어서 각 stack을 배열에 넣는 구현법
2. stack에 들어갈 수 있는지 여부와 청소 가능 여부는 각기 다른 boolean변수를 가지고 있어야 한다.
3. result의 true, false값에 따라 출력값을 다르게 설정한 부분
4. stack 개념

0개의 댓글