๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

by carrot0911 2025. 4. 10.

๋ฌธ์ œ ์„ค๋ช…

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

ํŠธ๋Ÿญ ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ๊ฐ•์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์ผ์ฐจ์„  ๋‹ค๋ฆฌ๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์œผ๋กœ ๊ฑด๋„ˆ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฆฌ์—๋Š” ํŠธ๋Ÿญ์ด ์ตœ๋Œ€ bridge_length๋Œ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฆฌ๋Š” weight ์ดํ•˜๊นŒ์ง€์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ๋‹ค๋ฆฌ์— ์™„์ „ํžˆ ์˜ค๋ฅด์ง€ ์•Š์€ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํŠธ๋Ÿญ 2๋Œ€๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ณ  ๋ฌด๊ฒŒ๋ฅผ 10kg๊นŒ์ง€ ๊ฒฌ๋””๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ฒŒ๊ฐ€ [7, 4, 5, 6]kg์ธ ํŠธ๋Ÿญ์ด ์ˆœ์„œ๋Œ€๋กœ ์ตœ๋‹จ ์‹œ๊ฐ„ ์•ˆ์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฑด๋„ˆ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณผ ์‹œ๊ฐ„ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚œ ํŠธ๋Ÿญ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ํŠธ๋Ÿญ ๋Œ€๊ธฐ ํŠธ๋Ÿญ
0 [] [] [7, 4, 5, 6]
1~2 [] [7] [4, 5, 6]
3 [7] [4] [5, 6]
4 [7] [4, 5] [6]
5 [7, 4] [5] [6]
6~7 [7, 4, 5] [6] []
8 [7, 4, 5, 6] [] []

๋”ฐ๋ผ์„œ, ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋ ค๋ฉด ์ตœ์†Œ 8์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋Ÿญ ์ˆ˜ bridge_length, ๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ weight, ํŠธ๋Ÿญ ๋ณ„ ๋ฌด๊ฒŒ truck_weights๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • bridge_length๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • weight๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • truck_weights์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋Š” 1 ์ด์ƒ weight ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

bridge_length weight truck_weights return
2 10 [7, 4, 5, 6] 8
100 100 [10] 101
100 100 [10, 10, 10, 10, 10, 10, 10, 10, 10, 10] 110

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        // ๊ฒฝ๊ณผ ์‹œ๊ฐ„
        int answer = 0;
        
        // ๋‹ค๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ„ ํŠธ๋Ÿญ๋“ค์„ ์ €์žฅํ•  Queue
        // ๊ฐ ์š”์†Œ๋Š” [ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ, ๋‹ค๋ฆฌ๋ฅผ ์™„์ „ํžˆ ๊ฑด๋„ˆ๋Š” ์‹œ๊ฐ„]
        Queue<int[]> bridge = new LinkedList<>();
        // ํ˜„์žฌ ๋‹ค๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ์ด ๋ฌด๊ฒŒ
        int currentWeight = 0;
        // ์•„์ง ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์€ ๋‹ค์Œ ํŠธ๋Ÿญ์˜ ์ธ๋ฑ์Šค
        int idx = 0;
        
        // ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while (idx < truck_weights.length || !bridge.isEmpty()) {
            // 1์ดˆ ๊ฒฝ๊ณผ
            answer++;
            
            // ๋‹ค๋ฆฌ์—์„œ ๋‚ด๋ฆด ํŠธ๋Ÿญ์ด ์žˆ๋‹ค๋ฉด
            if (!bridge.isEmpty() && bridge.peek()[1] == answer) {
                // ํŠธ๋Ÿญ์„ Queue์—์„œ ๊บผ๋‚ด๊ณ , ํ˜„์žฌ ๋ฌด๊ฒŒ์—์„œ ์ œ๊ฑฐ
                currentWeight -= bridge.poll()[0];
            }
            
            // ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด
            if (idx < truck_weights.length) {
                // ๋‹ค์Œ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ์™€ ํ˜„์žฌ ๋ฌด๊ฒŒ์˜ ํ•ฉ์ด ์ œํ•œ ๋ฌด๊ฒŒ ์ดํ•˜์ด๊ณ , ๋‹ค๋ฆฌ ์œ„ ํŠธ๋Ÿญ์˜ ์ˆ˜๊ฐ€ ๋‹ค๋ฆฌ ๊ธธ์ด๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
                if (truck_weights[idx] + currentWeight <= weight && bridge.size() < bridge_length) {
                    // ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ์™€ ๋‹ค๋ฆฌ๋ฅผ ๋‹ค ๊ฑด๋„ˆ๋Š” ์‹œ๊ฐ„(ํ˜„์žฌ ์‹œ๊ฐ„ + ๋‹ค๋ฆฌ ๊ธธ์ด)๋ฅผ Queue์— ์ถ”๊ฐ€
                    bridge.add(new int[]{truck_weights[idx], answer + bridge_length});
                    // ๋‹ค๋ฆฌ ์œ„ ์ด ๋ฌด๊ฒŒ ๊ณ„์‚ฐ
                    currentWeight += truck_weights[idx];
                    // ๋‹ค์Œ ํŠธ๋Ÿญ ์ธ๋ฑ์Šค +1
                    idx++;
                }
            }
        }
        
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผ ํ• ์ง€ ๊ฐ์ด ์•ˆ์žกํ˜€์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๋ฉด์„œ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.