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

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

by carrot0911 2025. 3. 29.

๋ฌธ์ œ ์„ค๋ช…

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

 

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

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

programmers.co.kr

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ € ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด progresses์™€ ๊ฐ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด speeds๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • ์ž‘์—…์˜ ๊ฐœ์ˆ˜(progresses, speeds๋ฐฐ์—ด์˜ ๊ธธ์ด)๋Š” 100๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—… ์ง„๋„๋Š” 100 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—… ์†๋„๋Š” 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋ฃจ์˜ ๋์— ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง„๋„์œจ์ด 95%์ธ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ•˜๋ฃจ์— 4%๋ผ๋ฉด ๋ฐฐํฌ๋Š” 2์ผ ๋’ค์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

progresses speeds return
[93, 30, 55] [1, 30, 5] [2, 1]
[95, 90, 99, 99, 80, 99] [1, 1, 1, 1, 1, 1] [1, 3, 2]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ 93% ์™„๋ฃŒ๋˜์–ด ์žˆ๊ณ  ํ•˜๋ฃจ์— 1%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 7์ผ๊ฐ„ ์ž‘์—… ํ›„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ 30%๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์žˆ๊ณ  ํ•˜๋ฃจ์— 30%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 3์ผ๊ฐ„ ์ž‘์—… ํ›„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    ํ•˜์ง€๋งŒ ์ด์ „ ์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ์•„์ง ์™„์„ฑ๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š” 7์ผ์งธ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ 55%๊ฐ€ ์™„๋ฃŒ๋˜์–ด ์žˆ๊ณ  ํ•˜๋ฃจ์— 5%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 9์ผ๊ฐ„ ์ž‘์—… ํ›„ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ 7์ผ์งธ์— 2๊ฐœ์˜ ๊ธฐ๋Šฅ, 9์ผ์งธ์— 1๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํ•˜๋ฃจ์— 1%์”ฉ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ์ž‘์—…์ด ๋๋‚˜๊ธฐ๊นŒ์ง€ ๋‚จ์€ ์ผ์ˆ˜๋Š” ๊ฐ๊ฐ 5์ผ, 10์ผ, 1์ผ, 1์ผ, 20์ผ, 1์ผ์ž…๋‹ˆ๋‹ค.
  • ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๋จผ์ € ์™„์„ฑ๋˜์—ˆ๋”๋ผ๋„ ์•ž์— ์žˆ๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์™„์„ฑ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐํฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ 5์ผ์งธ์— 1๊ฐœ์˜ ๊ธฐ๋Šฅ, 10์ผ์งธ์— 3๊ฐœ์˜ ๊ธฐ๋Šฅ, 20์ผ์งธ์— 2๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

 

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

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        // ๊ฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๋‚จ์€ ๋‚ ์งœ๋ฅผ ์ €์žฅํ•  ํ ์ƒ์„ฑ
        Queue<Integer> queue = new LinkedList<>();
        // ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ์ €์žฅํ•  ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
        ArrayList<Integer> list = new ArrayList<>();
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ progresses์™€ speeds ๋ฐฐ์—ด ์ˆœํšŒ
        for (int i = 0; i < progresses.length; i++) {
            // ๋งŒ์•ฝ ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ๊ฒฝ์šฐ
            if ((100 - progresses[i]) % speeds[i] == 0) {
                // ๊ทธ๋Œ€๋กœ ๋‚˜๋ˆ„๊ณ  queue์— ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ ์ €์žฅ
                queue.add((100 - progresses[i]) / speeds[i]);
            } else {
                // queue์— ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ์— +1 ํ›„ ์ €์žฅ
                queue.add((100 - progresses[i]) / speeds[i] + 1);
            }
        }
        
        // queue์—์„œ ๊บผ๋‚ธ ๊ฐ’ num์— ์ €์žฅ
        int num = queue.poll();
        // ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  count ๋ณ€์ˆ˜ ์ƒ์„ฑ
        int count = 1;
        
        // queue๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while (!queue.isEmpty()) {
            // ๋งŒ์•ฝ queue์˜ ์ตœ์ƒ์œ„ ๊ฐ’์ด num๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ
            if (num >= queue.peek()) {
                // count +1
                count++;
                // queue ์ตœ์ƒ์œ„ ๊ฐ’ ๊บผ๋‚ด๊ธฐ
                queue.poll();
            } else {
                // ํ˜„์žฌ count๋ฅผ list์— ์ €์žฅ
                list.add(count);
                // count๋ฅผ 1๋กœ ์ดˆ๊ธฐํ™”
                count = 1;
                // num์— queue ์ตœ์ƒ์œ„ ๊ฐ’ ๊บผ๋‚ด๊ธฐ
                num = queue.poll();
            }
        }
        // list์— count๊ฐ’ ์ €์žฅ
        list.add(count);
        
        // answer ๋ฐฐ์—ด ์ƒ์„ฑ
        int[] answer = new int[list.size()];
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ answer ์ˆœํšŒ
        for (int i = 0; i < answer.length; i++) {
            // answer์— list ๊ฐ’ ์ €์žฅ
            answer[i] = list.get(i);
        }
        
        // answer ๋ฐ˜ํ™˜
        return answer;
    }
}

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

  • ๋ชปํ’€์–ด์„œ ๋‹ต ํ™•์ธํ•˜๊ณ  ์ดํ•ดํ•˜๋ฉด์„œ ํ•ด๊ฒฐ,,ํ–ˆ์Šต๋‹ˆ๋‹ค,,