From 8a9d5391a9e051a1e612bf06082722c8bc0926b6 Mon Sep 17 00:00:00 2001 From: Yoepee Date: Sun, 6 Jul 2025 10:46:51 +0900 Subject: [PATCH] docs: add 42586 description --- src/week01/Yoepee/README.md | 81 +++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/week01/Yoepee/README.md diff --git a/src/week01/Yoepee/README.md b/src/week01/Yoepee/README.md new file mode 100644 index 0000000..92c342e --- /dev/null +++ b/src/week01/Yoepee/README.md @@ -0,0 +1,81 @@ +# ๐Ÿ“ฆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ (PG - 42586) + +> ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค [๊ธฐ๋Šฅ ๊ฐœ๋ฐœ](https://school.programmers.co.kr/learn/courses/30/lessons/42586) ๋ฌธ์ œ ํ’€์ด +> โœ… `solution2`: ์ผ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ ๊ธฐ๋ฐ˜ ํ’€์ด +> โœ… `solution`: Stack์„ ํ™œ์šฉํ•œ ์—ญ์ˆœ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ + +--- + +## ๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ + +- ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ ์ง„ํ–‰๋ฅ (`progresses[]`)๊ณผ ๊ฐœ๋ฐœ ์†๋„(`speeds[]`)๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, +- ๊ฐ ๊ธฐ๋Šฅ์ด ์™„๋ฃŒ๋˜๋Š” ๋‚  ๊ธฐ์ค€์œผ๋กœ **๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ํ•จ๊ป˜ ๋ฐฐํฌ๋˜๋Š”์ง€**๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. +- **์•ž์„  ๊ธฐ๋Šฅ์ด ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค์Œ ๊ธฐ๋Šฅ๋„ ํ•จ๊ป˜ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Œ.** + +--- + +## ๐Ÿง  ํ’€์ด ์ „๋žต + +### โœ… ๊ณตํ†ต ์•„์ด๋””์–ด + +- ๊ฐ ๊ธฐ๋Šฅ๋งˆ๋‹ค `์ž”์—ฌ์ผ = Math.ceil((100 - progress) / speed)`๋กœ ๊ณ„์‚ฐ +- ๋ฐฐํฌ ๊ธฐ์ค€์ผ(`max`)์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๊ธฐ๋Šฅ์ด `<= max` ์ด๋ฉด ํ•จ๊ป˜ ๋ฐฐํฌ +- ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ๋ฐฐํฌ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์Œ +- ๋งˆ์ง€๋ง‰ ๋ฐฐํฌ๋Š” ๋ฃจํ”„ ๋ฐ–์—์„œ ๋”ฐ๋กœ ์ฒ˜๋ฆฌ + +--- + +## ๐Ÿ”Ž ์ฝ”๋“œ ์„ค๋ช… + +### 1. `solution2` โ€“ ๋‹จ์ˆœ ๋ฃจํ”„ ๊ธฐ๋ฐ˜ + +- `progresses[]`๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœํšŒ +- `count`, `max`๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐํฌ ๋ฌถ์Œ์„ ๊ตฌ์„ฑ +- ์ฝ”๋“œ๊ฐ€ **์ง๊ด€์ **์ด๊ณ , ์ถ”๊ฐ€ ์ž๋ฃŒ๊ตฌ์กฐ ์—†์ด ํ•ด๊ฒฐ + +```java +int max = ์ž”์—ฌ์ผ(progresses[0], speeds[0]); +for (i = 1 ~ N) { + int day = ์ž”์—ฌ์ผ(progresses[i], speeds[i]); + if (day <= max) count++; + else { + answer.add(count); + count = 1; + max = day; + } +} +``` + +### 2. `solution2` โ€“ Stack์„ ํ™œ์šฉํ•œ ์—ญ์ˆœ ์ฒ˜๋ฆฌ + +- ๋’ค์—์„œ๋ถ€ํ„ฐ Stack์— ์ž”์—ฌ์ผ์„ ์Œ“๊ณ  popํ•˜๋ฉด์„œ ์ˆœํšŒ +- ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๋™์ผํ•˜์ง€๋งŒ ์—ญ์ˆœ ์ฒ˜๋ฆฌ + Stack ํ™œ์šฉ์œผ๋กœ ๋ณ€ํ˜•๋œ ๋ฐฉ์‹ +- Stack ์—ฐ์Šต์šฉ ํ’€์ด ๋˜๋Š” ํ›„์ž…์„ ์ถœ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ์— ์ ์šฉ ๊ฐ€๋Šฅ + +```java +Stack stack = ์ž”์—ฌ์ผ์„ ์—ญ์ˆœ์œผ๋กœ push +while (!stack.empty()) { +int day = stack.pop(); + if (day <= max) count++; + else { + answer.add(count); +count = 1; +max = day; + } +} +``` + +### ๐Ÿ“ˆ ์ถœ๋ ฅ ์˜ˆ์‹œ +```aiignore +์ž…๋ ฅ: progresses = [93, 30, 55], speeds = [1, 30, 5] +์ถœ๋ ฅ: [2, 1] + +์ž…๋ ฅ: progresses = [95, 90, 99, 99, 80, 99], speeds = [1, 1, 1, 1, 1, 1] +์ถœ๋ ฅ: [1, 3, 2] +``` + +### โœจ ์ฃผ์š” ํฌ์ธํŠธ +- Math.ceil ์‚ฌ์šฉ ์‹œ 100.0์„ ๊ณฑํ•ด ์ •ํ™•ํ•œ ์‹ค์ˆ˜ ์—ฐ์‚ฐ์œผ๋กœ ์ž”์—ฌ์ผ ๊ณ„์‚ฐ +- Integer.valueOf(count) โ†’ List ๋ฅผ int[]๋กœ ๋ณ€ํ™˜ ์‹œ stream().mapToInt() ์‚ฌ์šฉ +- Stack ํ’€์ด์™€ ๋ฃจํ”„ ํ’€์ด ๋ชจ๋‘ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‚˜, ๋ฉด์ ‘์—์„œ๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฃจํ”„ ๋ฐฉ์‹์ด ์œ ๋ฆฌ +- solution2์™€ solution์€ ๋กœ์ง์€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ž๋ฃŒ๊ตฌ์กฐ ์„ ํƒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Œ