프로그래머스 연습문제 택배상자 [JAVA] - 22년 10월 26일

Denia·2022년 10월 26일
0

코딩테스트 준비

목록 보기
107/201
  • 기본 순서인 1,2,3 으로 내려오는 택배를 defaultOrder로 정의
  • stack을 저장이 가능한 택배인 saveOrder로 정의
  • 트럭에 실어야하는 택배의 배열을 wantOrder & wantOrder 인덱스를 wantOrderIdx로 정의
  1. wantOrder 와 saveOrder를 비교한다 (saveOrder 가 empty가 아닌지 확인 필요)
    • 두개가 동일하면
      - answer를 1 증가
      - wantOrderIdx를 1 증가
      - saveOrder를 pop
      - 다시 1번으로 돌아간다.
    • 동일하지 않으면 다음 순서로 넘어간다.
  2. defaultOrder를 확인하여 더 이상 처리해야할 택배가 없으면 해당 루프를 종료한다.
  3. defaultOrder 와 wantOrder를 비교한다.
    • 두개가 동일하면
      - answer를 1 증가
      - defaultOrder를 1 증가
      - wantOrderIdx를 1 증가
      - 다시 1번으로 돌아간다.
    • 동일하지 않으면 다음 순서로 넘어간다.
  4. defaultOrder를 saveOrder에 저장하고 defaultOrder를 1 증가 시킨다.
  5. 1번으로 돌아간다.
import java.util.Stack;

class Solution {
    public int solution(int[] wantOrder) {
        int answer = 0;

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

        int defaultOrder = 1;
        int wantOrderIdx = 0;

        while (true) {
            if (!saveOrder.isEmpty() && wantOrder[wantOrderIdx] == saveOrder.peek()) {
                answer++;

                wantOrderIdx++;
                saveOrder.pop();

                continue;
            }

            if (defaultOrder > wantOrder.length)
                break;

            if (wantOrder[wantOrderIdx] == defaultOrder) {
                answer++;

                wantOrderIdx++;
                defaultOrder++;

                continue;
            }

            saveOrder.push(defaultOrder);
            defaultOrder++;
        }

        return answer;
    }
}

profile
HW -> FW -> Web

0개의 댓글