๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/Programmers

[1์ฃผ์ฐจ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

๊ธฐ๋Šฅ๊ฐœ๋ฐœ ๋ฌธ์ œ ํ’€์ด

๐Ÿ’ป Q

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

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


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

 

๐Ÿ’‍โ™€๏ธ ์ œํ•œ ์‚ฌํ•ญ
• ์ž‘์—…์˜ ๊ฐœ์ˆ˜(progresses, speeds๋ฐฐ์—ด์˜ ๊ธธ์ด)๋Š” 100๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
• ์ž‘์—… ์ง„๋„๋Š” 100 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
• ์ž‘์—… ์†๋„๋Š” 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
• ๋ฐฐํฌ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋ฃจ์˜ ๋์— ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
• ์˜ˆ๋ฅผ ๋“ค์–ด ์ง„๋„์œจ์ด 95%์ธ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ํ•˜๋ฃจ์— 4%๋ผ๋ฉด ๋ฐฐํฌ๋Š” 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๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก A

๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์™„๋ฃŒ ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋’ค์— ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ์ƒ๊ฐํ–ˆ์„๋•Œ FIFO ๊ตฌ์กฐ์ธ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ ํ•ฉํ•ด ๋ณด์˜€๋‹ค.
ํ•˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ์ง€ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์› ๋‹ค.
์ง„ํ–‰๋ฅ ๊ณผ ์ง„ํ–‰์†๋„๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด์ฃผ๊ณ  ๋ฐฐํฌ์ผ ์ˆ˜๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“  ํ›„ ์ง„ํ–‰๋ฅ ๊ณผ ์ง„ํ–‰์†๋„๋ฅผ ๋”ํ•ด 100์„ ๋„˜์œผ๋ฉด ๋ฐฐํฌ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” count๋ฅผ ๋Š˜๋ ค์ฃผ๊ณ  ๊ฐ€์žฅ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ธ๋‹ค.
100์ด ๋„˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‚ ์งœ ์ˆ˜๋ฅผ ๋Š˜๋ ค ์ฃผ๊ณ  ๋ฐฐํฌ๋˜๋Š” ๋‚ ์งœ์˜ ๊ธฐ๋Šฅ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ ํ•œ๋‹ค.

import java.util.Queue;
import java.util.LinkedList;
import java.util.ArrayList;

class Solution { 
    public int[] solution(int[] progresses, int[] speeds) {

        int[] answer = {}; 

        ArrayList<Integer> days = new ArrayList<>(); 
        Queue<Integer> prog = new LinkedList<>(); 
        Queue<Integer> sp = new LinkedList<>(); 

        for(int i=0;i<progresses.length;i++) 
            prog.add(progresses[i]); 
        for(int i=0;i<speeds.length;i++) 
            sp.add(speeds[i]); 
        int day = 1; 
        while(!prog.isEmpty()){ 
            int count = 0; 
            while(prog.peek() + (sp.peek() * day) < 100) 
                day++; 
            while (!prog.isEmpty() && prog.peek() + (sp.peek() * day) >= 100){ 
                prog.remove(); 
                sp.remove(); 
                count++; 
            } 
            if(count > 0) days.add(count); 
        } 
        answer = new int[days.size()]; 
        for(int i = 0; i < days.size(); i++) answer[i] = days.get(i); 
        return answer; 
    } 
}