👩🏻‍💻 iOSun
article thumbnail

문제 설명

 

문제 풀이

일단 이 문제의 핵심은 가장 거리가 먼 곳부터 처리를 해야한다는 것

 

거리를 최소화하려면 언젠간 멀리 있는 택배도 처리해야하기 때문에 첨부터 먼 곳부터 배달하면 된다.

 

먼 곳부터 처리한다 -> LIFO인 스택이 생각났다.

 

따라서 while문을 돌리며 popLast를 해주며 택배 수용범위인 cap까지 최대한 배달하고 수거한다.

 

 

코드

func solution(_ cap:Int, _ n:Int, _ deliveries:[Int], _ pickups:[Int]) -> Int64 {
    var del = deliveries
    var pick = pickups
    var distance = 0
    
    // 뒤에서 택배 개수가 0이면 다 제거
    while !del.isEmpty {
        let num = del.popLast()!
        if num != 0 {
            del.append(num)
            break
        }
    }
    
    while !pick.isEmpty {
        let num = pick.popLast()!
        if num != 0 {
            pick.append(num)
            break
        }
    }
    
    while true {
        // 남은 택배가 없으면 break
        if del.isEmpty && pick.isEmpty {
            break
        }
    
        // 가장 먼 곳에서 왕복 -> *2
        distance += max(del.count, pick.count)*2
        
        // 택배 배달
        var count = cap
        while !del.isEmpty {
            let num = del.popLast()!
            
            // 0이면 패스
            if num == 0 {
                continue
            }
            // cap을 넘어가면 break
            else if count < num {
                del.append(num-count)
                break
            }
            else {
                count -= num
            }
        }
        
        // 택배 수거
        count = 0
        while !pick.isEmpty {
            let num = pick.popLast()!
            
            if num == 0 {
                continue
            }
            // cap을 넘어가면 break
            else if count+num > cap {
                pick.append(num-(cap-count))
                break
            }
            else {
                count += num
            }
        }
    }
    
    return Int64(distance)
}

 

후기

풀이시간: 약 1시간 30분

 

1. while문이 빠져나오는 조건을 둘 다 비어있을때로 해야했는데 둘 중 하나만 비어도 빠져나오게 처리해서 틀렸다.

 

2. 테스트케이스 2번만 계속 틀렸는데.. 결국 질문하기에서 힌트를 봐서 처리했다.

-> 끝에 택배 개수가 0인 것들을 처리해주지 않아서 틀림

ex) [1,0] [1,0] 이 있으면 끝에 0은 볼 필요없는데 거리 2까지 감

 

푸는데 너무 오래 걸렸다..🥲

profile

👩🏻‍💻 iOSun

@iosun

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...