알고리즘

프로그래머스 - 택배상자

최데브 2024. 8. 25. 17:35

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

 

프로그래머스

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

programmers.co.kr

 

스스로 풀지 못한 문제다.

stack 을 사용하고 하나의 for 문을 쓰면서 트럭에 싣을때마다 target 이라는 int 를 증가시키면서

남은 배열과 stack 에서 우선순위에 맞게 트럭에 싣을 수 있는 택배가 있는지 체크한다.

 

라는 생각은 했는데 처음 우선순위를 확인하기 위한 전처리를 생각하지 못했다.

 

import java.util.*
class Solution {
    fun solution(order: IntArray): Int {
        var answer: Int = 0
        val priority = IntArray(order.size)
        var stack = Stack<Int>()
        var target = 0 // 현재 담을 수 있는 우선순위 index
        for(i in 0 until order.size){
            priority[order[i]-1] = i
            //나머지 코드는 흡사하게 작성했었는데priority[order[i]-1] = i
            //이런식으로 우선순위만을 담는 array를 만들 아이디어를 떠올리지 못했다
        }
        
        for(i in 0 until priority.size){
        	//우선순위가 담긴 array 와 현재 트럭에 싣을 수 있는 우선순위 index 와 비교
            if(priority[i] == target){
            	//담을 수 있는 우선순위라면 트럭에 싣으면서 target 을 증가하여 다음 우선순위 택배를
                //찾는다
                target++
            }else{
            	//담을 수 없다면 보조밸트로 뺸다.
                stack.add(priority[i])
            }
            //target 이 증가했고 스택의 가장위에 있는 택배 우선순위가 증가된 target과 같은지 체크
            while(stack.isNotEmpty() && stack.peek() == target){
            	//보조밸트에서 쓸 수 있는 택배가 있다면 target 을 증가시키고
                //보조밸트에서 pop
                target++
                stack.pop()
            }
        }
        
        return target
    }
}

 

헤매다가 위 코드처럼 우선순위만을 따로 담는 array 를 만들면

내가 풀어보려고 했던 풀이가 퍼즐이 들어맞는다는걸 알게됐다.

 

항상 접근법를 떠올리고 얼추 비슷하게는 짜는데 결정적인 아이디어를

떠올리지 못하는거 같다.. 아직 경험이 부족한듯하다 ㅠㅠ

반응형