Algorithm/Programmers

[Programmers] 택배상자 / ⭕

cks._.hong 2024. 10. 6. 13:59
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 제출 코드 (23분 20초 / 스택)

import java.util.*;

class Solution {
    public int solution(int[] order) {
        int answer = 0;
        ArrayDeque<Integer> dq = new ArrayDeque<>();
        int num = 1;
        int idx = 0;
        while(idx < order.length) {
            if(num < order[idx]) {
                dq.add(num++);
            } else if(num == order[idx]) {
                answer++;
                idx++;
                num++;
            } else {
                if(!dq.isEmpty() && dq.pollLast() == order[idx]) {
                    answer++;
                    idx++;
                } else {
                    break;
                }
            }
        }
        
        return answer;
    }
}

 

2. 구현 로직

  • order를 앞에서부터 하나씩 탐색
    • 만약, order[idx] > num이라면 스택에 삽입 /  num 증가
    • 만약, order[idx] == num 이라면 idx, num answer +1 증가
    • 만약, order[idx] < num이라면 스택 peek == order[idx] 인지 확인하고 같다면 answer, idx++
      • 아니면 반복문 종료 및 정답 추출

 

3. 유의할 점

  • order[idx] == num 일 경우에도 num을 증가시켜야 한다.