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)
'ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv.3] ์ด์ค ์ฐ์ ์์ํ (0) | 2024.07.31 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๋ ๋งต๊ฒ (0) | 2024.07.30 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.07.26 |
[ํ๋ก๊ทธ๋๋จธ์ค] JadenCase ๋ฌธ์์ด ๋ง๋ค๊ธฐ (0) | 2024.07.25 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌธ์์ด ๋ด ๋ง์๋๋ก ์ ๋ ฌํ๊ธฐ (0) | 2024.07.24 |