문제 풀이(3)

Youngseon Kim·2023년 8월 6일
0

https://school.programmers.co.kr/learn/courses/30/lessons/131704

import java.util.*;
import java.io.*;

class Solution {


	public static void main(String[] args) {
		solution(new int[]{4, 3, 1, 2, 5});
	}

    public static int solution(int[] order) {
        int answer = 0;

		Stack<Integer>stack = new Stack<>();

		int N = order.length;

		int num = 1;

		for (int i = 0; i < N; i++) {
			
			int now = order[i];
			
			if (now >= num) {
				
				while(now >= num) {
					
					stack.push(num++);

				}

				stack.pop();
				
				answer++;
			}else{

				int n = stack.pop();

				
				if (n > now) {
					
					break;

				}else{

					

					answer++;

				}

			}

		}

		//System.out.println(answer+" "+stack);

        return answer;
    }
}

만약 현재 상자의 번호가 트럭에 실어야 하는 순서(num)와 일치한다면, 해당 상자를 트럭에 싣고, num을 증가시켜 다음 순서를 확인한다. 이때, 영재가 실은 상자의 개수(answer)도 증가시킨다.현재 상자의 번호가 트럭에 실어야 하는 순서와 일치하지 않는다면, 해당 상자는 보조 컨테이너 벨트에 보관해야 한다. 보조 컨테이너 벨트는 Stack으로 구현되어 있으며, 상자는 앞에서부터 하나씩만 빼낼 수 있다.영재가 상자를 싣는 과정을 마친 후, 최종적으로 트럭에 실린 상자의 개수를 반환한다. 이때 answer 값이 정답이 된다.

0개의 댓글