๐ ๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ก๊ทธ๋๋จธ์ค์ ์คํ(Stack) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ '๊ธฐ๋ฅ๊ฐ๋ฐ' ๋ฌธ์ (LV.2) ํ์ด๋ฅผ ํ๊ฒ ๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
ํ๋ก๊ทธ๋๋จธ์ค ํ์์๋ ๊ธฐ๋ฅ ๊ฐ์ ์์ ์ ์ํ ์ค์ ๋๋ค. ๊ฐ ๊ธฐ๋ฅ์ ์ง๋๊ฐ 100% ์ผ ๋ ์๋น์ค์ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋, ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๋๋ ๋ชจ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค์ ์๋ ๊ธฐ๋ฅ์ด ์์ ์๋ ๊ธฐ๋ฅ๋ณด๋ค ๋จผ์ ๊ฐ๋ฐ๋ ์ ์๊ณ , ์ด๋ ๋ค์ ์๋ ๊ธฐ๋ฅ์ ์์ ์๋ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋ ๋ ํจ๊ป ๋ฐฐํฌ๋ฉ๋๋ค.
๋จผ์ ๋ฐฐํฌ๋์ด์ผ ํ๋ ์์๋๋ก ์์ ์ ์ง๋๊ฐ ์ ํ ์ ์ ๋ฐฐ์ด progresses์ ๊ฐ ์์ ์ ๊ฐ๋ฐ ์๋๊ฐ ์ ํ ์ ์ ๋ฐฐ์ด speeds๊ฐ ์ฃผ์ด์ง ๋ ๊ฐ ๋ฐฐํฌ๋ง๋ค ๋ช ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋๋์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
- ์์ ์ ๊ฐ์(progresses, speeds๋ฐฐ์ด์ ๊ธธ์ด)๋ 100๊ฐ ์ดํ์ ๋๋ค.
- ์์ ์ง๋๋ 100 ๋ฏธ๋ง์ ์์ฐ์์ ๋๋ค.
- ์์ ์๋๋ 100 ์ดํ์ ์์ฐ์์ ๋๋ค.
- ๋ฐฐํฌ๋ ํ๋ฃจ์ ํ ๋ฒ๋ง ํ ์ ์์ผ๋ฉฐ, ํ๋ฃจ์ ๋์ ์ด๋ฃจ์ด์ง๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ง๋์จ์ด 95%์ธ ์์ ์ ๊ฐ๋ฐ ์๋๊ฐ ํ๋ฃจ์ 4%๋ผ๋ฉด ๋ฐฐํฌ๋ 2์ผ ๋ค์ ์ด๋ฃจ์ด์ง๋๋ค.
์ ์ถ๋ ฅ ์
progresses | completion | 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๊ฐ์ ๊ธฐ๋ฅ์ด ๋ฐฐํฌ๋ฉ๋๋ค.
๐ก ํ์ด
๋จผ์ ์์ ๋ค์ด ๋ฉฐ์น ์ ๊ฑธ์ณ์ ์๋ฃ๊ฐ ๋๋์ง ์๊ธฐ ์ํด์,
100% ์๋ฃ ๊ธฐ์ค์ผ๋ก '(100 - ์ง๋) / ์๋' ๊ณต์์ ์ด์ฉํ๋ฉด ๊ฐ ์์ ๋ค์ด ๋ฉฐ์น ์ ๊ฑธ์ณ์ ์๋ฃ๊ฐ ๋๋์ง ์ ์ ์๋ค.
๊ฐ๋ฐ ์ง๋(progresses) 30์ ๊ฐ๋ฐ์๋(speeds) 30์ ์์๋ก ํ๋ฉด ((100-30)/30)์ ๊ฐ์ 2.3333... ์ด ๋์ค๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ์์์ ์ด ๋์ค๋ฉด ์ฌ๋ฆผ(Ceil) ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค. 2.3์ผ์ด๋ฉด ์ต์ 3์ผ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ต์ํ ์์ ์ ํ์ํ ์ผ์๊ฐ 1์ผ์ด๋ฏ๋ก, 1๋ก ์ด๊ธฐํํ count ๋ณ์๋ฅผ ์์ฑ ํ ์ด ๊ฐ์ ํตํด์ answer ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋๋ก ํ๋ค.
์ต๋ ๋ง์ด ๊ฑธ๋ฆฌ๋ ์ผ ์ maxDay ๋ณ์๋ฅผ ์ ์ ๊ตฌํ days ๋ณ์ ์ฒซ๋ฒ์งธ ๊ฐ์ผ๋ก ์ด๊ธฐํ ํด์ฃผ์๋ค.
์ต๋ ๋ง์ด ๊ฑธ๋ฆฌ๋ ์ผ ์๋ฅผ ๋น๊ตํ๋ฉด์ counting์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์๋ค.
๊ทธ๋ฆฌ๊ณ , days ๋ฐฐ์ด์ ์ํํ๋ฉด์ ๊ฐ์ ๊ตฌํ ์ ์๋๋ก ํ๋ค.
for๋ฌธ์ ์ด๊ธฐ๊ฐ์ 1๋ก ์ฃผ์๋๋ฐ ์ด์ ๋ ์์ maxDay ๋ณ์์์ days ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ด๊ธฐ ๊ฐ์ผ๋ก ํ ๋นํด์ฃผ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ํ์ฌ ์ํํ๋ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๊ฐ์ด maxDay๋ณด๋ค ์์ผ๋ฉด count๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ๊ณ ,
maxDay๋ณด๋ค ํฌ๋ค๋ฉด maxDay์ ๊ฐ์ ํ์ฌ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๊ฐ์ผ๋ก ํ ๋นํด์ฃผ๊ณ answer์ ์ง๊ธ๊น์ง counting ๊ฐ์ ๊ฐ์ง๊ณ ์๋ count๋ณ์์ ๊ฐ์ answer์ push ํด์ค์ผ๋ก์จ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ count ๋ณ์์ ๊ฐ์ ๋ค์ 1๋ก ์ด๊ธฐํํด์ counting์ 1๋ถํฐ ๋ค์ ํ ์ ์๊ฒ๋ ํด์ฃผ์๋ค.
for๋ฌธ์ด ๋๋๊ณ ๋ง์ง๋ง์ผ๋ก ๋จ์์๋ count ๋ณ์์ ๊ฐ์ answer ๋ฐฐ์ด์ push ํด์ฃผ์๋ค.
ํ์ด ์ฝ๋
function solution(progresses, speeds) {
const answer = [];
const days = progresses.map((progress, index) =>
Math.ceil((100 - progress) / speeds[index])
);
let count = 1;
let maxDay = days[0];
for (let i = 1; i < days.length; i++) {
if (days[i] <= maxDay) {
count++;
} else {
maxDay = days[i];
answer.push(count);
count = 1;
}
}
answer.push(count);
return answer;
}
โ ์ฑ์