ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ’ก Introduction
์šฐ์„  ์ง๊ด€์ ์œผ๋กœ ๋ฌธ์ œ ์„ค๋ช…์— ๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋ณธ๋‹ค. ์ดํ›„ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•œ๋‹ค.

๐Ÿ“ข ๋ฌธ์ œ ์„ค๋ช… ์š”์•ฝ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 3 ๋ฌธ์ œ๋กœ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ผ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ์— ์†Œ์š” ์‹œ๊ฐ„์ด ๋‹ค์–‘ํ•œ ์š”์ฒญ๋“ค์ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ์‹œ๊ฐ„์— ๋“ค์–ด์˜ฌ ๋•Œ, ๊ฐ ์ž‘์—…์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ์š”์ฒญ๋œ ์ž‘์—…๋“ค์ด ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๐Ÿ” Hint
ํ‰๊ท ์ด ์ตœ์†Œ๋ผ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ํ•ฉ์ด ์ตœ์†Œ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ํ•ฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐ์— ์ง‘์ค‘ํ•ด๋ณด์ž.
ํ•ฉ์ด ์ตœ์†Œํ™”๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

 

์šฐ์„  ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‘ ๊ฐ€์ง€ ์ผ์„ ๋ฐ˜๋ณตํ•ด์„œ ํ•œ๋‹ค:

  1. ๋ชจ๋“  ์š”์ฒญ๋“ค์„ ๋‚˜์—ด
  2. ์š”์ฒญ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด ์ฒ˜๋ฆฌ

์ด ๋ฐ˜๋ณต๋˜๋Š” ๋™์ž‘๋“ค ์ค‘ 1๋ฒˆ ์š”์ฒญ ๋‚˜์—ด ์—์„œ ๊ฐ ์š”์ฒญ๋“ค๋ณ„๋กœ ํ˜„์žฌ์˜ ์‹œ์ ์—์„œ ์š”์ฒญํ–ˆ์„ ๋•Œ ์š”์ฒญ ์‹œ์ž‘ ์‹œ์  ~ ์š”์ฒญ ์™„๋ฃŒ ์‹œ์ ์˜ ์‹œ๊ฐ„์„ ๊ตฌํ•ด ๋‚˜์—ดํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  2๋ฒˆ ์š”์ฒญ ํ•˜๋‚˜ ์„ ํƒ ์—์„œ ์ตœ์†Œ๋ฅผ ๋จผ์ € ์„ ํƒํ•˜๋„๋ก ํ•œ๋‹ค.

 

์˜ˆ์‹œ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฐ์—ด jobs ๊ฐ€ ์žˆ๋‹ค: [[0, 3], [1, 9], [2, 6]]

์ด ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ ์œ„์—์„œ ์ƒ๊ฐํ•ด ๋‚ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•  ๊ฒƒ์ด๋‹ค.

 

์‹œ์ž‘.

 

1๋ฒˆ ๊ณผ์ •: 

1 - 1. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์œ„์น˜๋ฅผ pos ์ด๋ผ๊ณ  ํ•˜๊ฒ ๋‹ค. ์ฒ˜์Œ ์‹œ์ž‘ ํ›„ pos = 0 ์ด๋‹ค.

  • A ์ž‘์—…: [(์‹œ์ž‘์ ) 0, (์†Œ์š” ์‹œ๊ฐ„) 3]
    • A ์ž‘์—…์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„ + ์†Œ์š” ์‹œ๊ฐ„ = 0 - 0 + 3 = 3 ์ด๋‹ค.
  • B ์ž‘์—…: [(์‹œ์ž‘์ ) 1, (์†Œ์š” ์‹œ๊ฐ„) 9]
    • B ์ž‘์—…์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„ + ์†Œ์š” ์‹œ๊ฐ„ = 0 - 1 + 9 = 8 ์ด๋‹ค. 
  • C ์ž‘์—…: [(์‹œ์ž‘์ ) 2, (์†Œ์š” ์‹œ๊ฐ„) 6]
    • C ์ž‘์—…์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋Œ€๊ธฐ ์‹œ๊ฐ„ + ์†Œ์š” ์‹œ๊ฐ„ = 0 - 2 + 6 = 4 ์ด๋‹ค.

1 - 2. A ์ž‘์—…์„ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. pos = 3 ์ด๋‹ค. ํ˜„์žฌ๊นŒ์ง€ ์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์€ 3 ์ด๋‹ค.

 

๐Ÿ“Œ Note
๋ฌผ๋ก  ์ฒซ ๊ณผ์ •์—์„œ 0์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์š”์ฒญ์ด ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ์š”์ฒญ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์— ์ƒ๊ด€์—†์ด ์‹œ์ž‘์ ์ด 0์ธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

2๋ฒˆ ๊ณผ์ •:

...

N๋ฒˆ ๊ณผ์ •:

 

๋.

 

์œ„์—์„œ ์ƒ์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, 1๋ฒˆ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ณ  ๋‚˜์„œ ์ดํ›„ 2๋ฒˆ๋ถ€ํ„ฐ N ๋ฒˆ๊นŒ์ง€์˜ ๊ณผ์ •์—์„œ๋„ (N์€ ๋ฌผ๋ก  jobs ๋ฐฐ์—ด ๋‚ด์˜ ๋ฐฐ์—ด์˜ ์ˆ˜์ด๋‹ค, ์ฆ‰ jobs.length ์ด๋‹ค.) 1 - 1 ๊ณผ 1 - 2 ์˜ ๋™์ž‘์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค:

public int totalAboveAll(int[][] jobs) {
    int count = 0;
    int current = 0;

    List<Integer> minIndices = new ArrayList<>();
    int pos = 0;
    int min = 9999;

    int minIdx = -1;

    while (jobs.length > count) { // ์†Œ์š” ์‹œ๊ฐ„์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ, ์ž‘์—…์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ์ ์€ ํ•œ ๊ณ„์† ๋ฐ˜๋ณต๋œ๋‹ค. ๋งˆ์ง€๋ง‰์—๋Š” ์ด ์†Œ์š” ์‹œ๊ฐ„์ด ๊ตฌํ•ด์ง„๋‹ค.
        for(int i = 0; i < jobs.length; i++) { // ์ฒ˜๋ฆฌ๋ฅผ ๋Œ€๊ธฐํ•˜๋Š” ์ž‘์—…๋“ค ๊ฐ๊ฐ์— ๋Œ€ํ•ด,
            //TODO: ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ์ž‘์—…์„ ํŒŒ์•…์—์„œ ์ œ์™ธํ•œ๋‹ค.
            if (minIndices.contains(i)) continue; // ์ด๋ฏธ ์ฒ˜๋ฆฌํ•œ ์ž‘์—…์€ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

            int duration = pos - jobs[i][0] + jobs[i][1]; // ์ง€๊ธˆ ํŒŒ์•…๋œ ์ฒ˜๋ฆฌ ๊นŒ์ง€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ ,
            if (duration < min) { // ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์ฐพ๋Š”๋‹ค.
                min = duration;
                minIdx = i; // ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ ์€ ์ž‘์—…์˜ ๋ฐฐ์—ด ๋‚ด์—์„œ์˜ ์ธ๋ฑ์Šค๋ฅผ ํŒŒ์•…ํ•œ๋‹ค.
            }
        }
        pos += jobs[minIdx][1]; // ํŒŒ์•…๋œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ ์ดํ›„์˜ ์œ„์น˜๋กœ ์˜ฎ๊ธด๋‹ค.
        current += min; // ํ˜„์žฌ๊นŒ์ง€์˜ ์†Œ์š” ์‹œ๊ฐ„์„ ํŒŒ์•…ํ•œ๋‹ค.
        count++; // ๋ช‡ ๊ฐœ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ–ˆ๋Š”์ง€ ์„ผ๋‹ค.
        //TODO: ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ์ž‘์—…์„ ํŒŒ์•…์—์„œ ์ œ์™ธํ•œ๋‹ค.
        minIndices.add(minIdx);
        min = 99;

    } // ์ด ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๋ฉด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ž‘์—…๋“ค์„ ๋ชจ๋‘ current ์— ๋ˆ„์ ํ•ด ๋”ํ•œ ์ƒํƒœ๋กœ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

    return current;
}

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋™์ž‘์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ๊ฒƒ์ด๊ณ , ๊ฐ ์‹œ์ ์˜ ํŒ๋‹จ์—์„œ๋งŒ ์ตœ์†Œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์„ ํƒํ•˜๋ฏ€๋กœ ๊ฐ ์‹œ์ ์—์„œ์˜ ์ตœ์†Œ๋Š” ์ด ํ•ฉ์„ ์ตœ์†Œ๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๋ณด์žฅ์„ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ์‹œ์ ์—์„œ ์ตœ์†Œ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•ด๋„ ํ•ฉํ–ˆ์„ ๋•Œ ์ตœ์†Œ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

 

jobs = [[0, 16],[0, 14],[15, 1],[13, 13]] ์ผ ๋•Œ,

 

์ตœ์†Œ ํ•ฉ์€ [0,16] -> [15, 1] -> [13, 13] -> [0, 14] ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ์ธ

16 + 2 + 17 + 44 = 79 ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์œ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งค๋ฒˆ ์ตœ์†Œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์˜ ์š”์ฒญ์„ ์„ ํƒํ•˜๋ฏ€๋กœ

[0, 14]  -> [13, 13] -> [15, 1] -> [0, 16] ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด

14 + 14 + 13 + 44 = 85 ์ด๋‹ค.

 

79 < 85 ์ด๋ฏ€๋กœ ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ ํ•ฉ์„ ์ฐพ๋Š”๋ฐ์— ์‹คํŒจํ–ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ด์•ผํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค.

 

์ถœ์ฒ˜

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

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ