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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv.2] ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

Yuuuki 2024. 7. 29. 22:00

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

 

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

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

programmers.co.kr

 

 

โœ… ์ •๋‹ตํ’€์ด

import math
from collections import deque

def solution(progresses, speeds):
    answer = []
    progress_days=[math.ceil((100-x)/speeds[idx]) for idx,x in enumerate(progresses)]

    queue=deque(progress_days)

    done=queue[0]
    count=0

    while queue:
        if queue[0]<=done: 
            queue.popleft()
            count+=1 
        else:
            answer.append(count)
            count = 0
            done=queue[0]
    answer.append(count)


    return answer

๊ฐ€์žฅ ์‹ฌํ”Œํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์ดํ•œ๊ฒƒ ๊ฐ™๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ๋กœ, ๋งจ์•ž์˜ ์š”์†Œ๊ฐ€ ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ ์ „๊นŒ์ง€ ๋’ค์— ๊ธฐ๋‹ค๋ฆฌ๊ณ ์žˆ๋Š” ์ž‘์—…์€ ๋น ์ ธ๋‚˜๊ฐˆ์ˆ˜ ์—†๋‹ค.

 

์ผ๋‹จ, ๋‚จ์€ ์ž‘์—… ์ผ์ˆ˜๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ด๋ฅผ ํ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ, ์ฒซ๋ฒˆ์งธ์š”์†Œ์˜ ์ž‘์—…์ผ ์ดํ•˜์— ๋Œ€ํ•ด์„œ๋งŒ ํ๊ฐ€ ํ•จ๊ป˜ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๊ณ , ์นด์šดํŠธ๋ฅผ ํ•ด์ค€๋‹ค. 

๋น ์ ธ๋‚˜๊ฐ€๋Š” ์ž‘์—…์ผ๋ณด๋‹ค ํฌ๋ฉด, ์•„์ง ์ž‘์—…์ด ๋‚จ์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์—†๊ณ , ๊ทธ๋•Œ ํ๊ฐ€ ๋น ์ ธ๋‚˜๊ฐ€๋Š”๊ฒƒ์„ ๋ง‰๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋•Œ๋ฅผ ๊ธฐ์ ์œผ๋กœ answer์— ๋‹ต์„ ๋„ฃ์–ด์ฃผ๊ณ , ๋‹ค์‹œ ์นด์šดํŠธ๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด count์™€ ๋งจ์•ž์˜ ํ๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ์—ˆ๋‹ค. 

 

์ค‘๋‹จ์‹œ์ ์—, answer์— ์นด์šดํŠธ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ

๋งˆ์ง€๋ง‰ ์ž‘์—…์ด ๋๋‚ฌ์„๋• answer์— ๋„ฃ์–ด์ค„์ˆ˜์—†์–ด, while๋ฌธ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋„ฃ์–ด์ฃผ๋Š”์‹์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

โœ… JavaScript ํ’€์ด

function solution(progresses, speeds) {
    var answer = [];
  
    //1. ์ž‘์—…์ผ ๋ฐฐ์—ด ์ƒ์„ฑ
    const work=progresses.map((v,i)=>Math.ceil((100-v)/speeds[i]));
    //2. ์ˆœํšŒ

    let deploy=work[0];
    let count=0;
    
    for(let i=0;i<work.length;i++){
        
        if(work[i]>deploy){
            answer.push(count);
            count=0;
            deploy=work[i];
        }
        count++;
    }
    answer.push(count); //๋งˆ์ง€๋ง‰ ์š”์†Œ push
    return answer;

}

 

 

 

 

ํ’€๋ฉด ์ข‹์„ ๋‹ค๋ฅธ ์šฐ์„ ์ˆœ์œ„ ํ ๋ฌธ์ œ

 

https://www.acmicpc.net/problem/1966

 

๋ฐฑ์ค€ 1966๋ฒˆ : ํ”„๋ฆฐํ„ฐํ

# ์ธ์‡„=๋งจ์•ž์š”์†Œ ์ œ๊ฑฐ์‹œ, 
# list(stack)๋Š” pop(0)=O(n)
# Queue๋Š” popleft()=O(1)  -> Queue ์‚ฌ์šฉ

# ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ queue์—์„œ max๊ฐ’์ด์—ฌ์•ผ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅ

import sys
from collections import deque
input=sys.stdin.readline
n=int(input())
find=False


for _ in range(n):
    q=deque() #queue ์ƒ์„ฑ 

    n,target=map(int,input().split())
    priority=list(map(int,input().split()))
    
    for idx,p in enumerate(priority):
        q.append((idx,p)) #(index:์šฐ์„ ์ˆœ์œ„)
    
    result=0
    
    while True:
        # ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ํ˜„์žฌ ํ์—์„œ ๊ฐ€์žฅ ํฐ ์šฐ์„ ์ˆœ์œ„์ธ์ง€ ํ™•์ธ
        max_priority=max(q,key=lambda x:x[1])[1]
        first=q.popleft()
  

        if first[1]==max_priority:
            result+=1
            #target ํ™•์ธ
            if target==first[0]:
              print(result)
              break
        else:
            #๋’ค๋กœ๊ฐ€๊ธฐ
            q.append(first)