문제 풀기/C#

106. 택배상자

kagan-draca 2025. 4. 3. 16:42

 

기본 틀 :

using System;

public class Solution {
    public int solution(int[] order) {
        int answer = 0;
        return answer;
    }
}

 

간단한 문제인데 사소한 실수와 생각이 너무 많아져서 문제를 빨리 해결하지 못 했다.

( 풀이 방법을 글로 적어봤는데 글이 별로라 ChatGPT의 도움을 받아 정리했다)

 

해결 방법

  1. 박스 인덱스 (boxIndex) 초기화
    • 현재 적재해야 할 order의 인덱스를 추적하는 변수 boxIndex를 선언합니다.
  2. 박스 적재 과정
    • 1부터 n까지 박스를 순차적으로 확인합니다.
    • 현재 박스가 order[boxIndex]와 같다면 바로 트럭에 적재하고 boxIndex를 증가시킵니다.
    • 그렇지 않다면, 보조 컨테이너(Stack)에 저장합니다.
  3. 보조 컨테이너에서 적재 확인
    • Stack의 최상단 박스가 order[boxIndex]와 같다면, 이를 꺼내 트럭에 적재하고 boxIndex를 증가시킵니다.
    • 더 이상 적재할 박스가 없을 때까지 반복합니다.
  4. 최종 결과 반환
    • 트럭에 적재한 박스의 개수(boxIndex)를 반환합니다.
using System;
using System.Collections.Generic;

public class Solution {
    public int solution(int[] order) {
        
        int boxIndex = 0;
        
        Stack<int> stack= new Stack<int>();
        
        for(int i = 1; i <= order.Length; i++)
        {
            if(i == order[boxIndex])
                boxIndex++;
            else
                stack.Push(i);
            
            while(stack.Count > 0 && stack.Peek() == order[boxIndex])
            {
                stack.Pop();
                boxIndex++;
            }
        }
        
        return boxIndex;
    }
}

 

문제 해결에 오랜 시간 걸린 이유로는 

 

            if(i == order[boxIndex])
                boxIndex++;

 

if 문의 조건에 부합할 경우 boxIndex를 증가시키고 continue를 사용했기 때문이다...

 

그럴 경우 if 문 조건에 부합하는 박스를 찾은 이후

 

곧 바로 stack 안의 박스와 다음 우선순위의 박스를 조회하지 않아 

 

박스를 꺼낼 기회를 잃어 오류가 발생했다...

 

 

 

 

 

 

개인적으로 요새 생각하는 문제를 해결에 생각하는 힘이 너무 많이 떨어지기 시작한 것 같아 속상하다ㅜㅜ