์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Node.js
- ์ฝ๋ฉํ ์คํธ
- DP
- ์๊ณ ๋ฆฌ์ฆ
- JavaScript
- ๊ณผ์ ํ ์คํธ
- ๋๋๊ทธ ์ด๋ฒคํธ
- ๋ธ๋ฃจํธํฌ์ค
- Redux toolkit
- ๋ฆฌ๋์ค ํดํท
- ์นด์นด์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- icecandidate
- svgํ์ผ ๋ค๋ฃจ๊ธฐ
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ๋์ ๊ณํ๋ฒ
- TypeScript
- ์ฝ๋ ํฌ๋ฉง
- router v6
- custom hook
- React
- ๋ฐฑ์ค
- js
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ฝํ
- ์ด๋ฏธ์ง ์์
- ์นด์นด์ค์ฑ์ฉ
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์ด๋ถํ์
- Today
- Total
๐ฅ dev-ruby
[ํ๋ก๊ทธ๋๋จธ์ค] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ | ์๋ฐ์คํฌ๋ฆฝํธ | Lv.3 | 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ | ์๋ฐ์คํฌ๋ฆฝํธ | Lv.3 | 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ
ruby_s 2022. 5. 2. 22:30๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/64062
ํ์ด
์ ํ์ฑO, ํจ์จ์ฑX ์ฝ๋
function solution2(stones, k) { // ์ ํ์ฑ๋ง ํต๊ณผ
let start = 1,
end = Math.max(...stones);
while (start <= end) {
const mid = Math.floor((start + end) / 2);
const temp = stones.map((num) => num - mid);
let count = 0;
for (const num of temp) {
if (num <= 0) count++;
else count = 0;
if (count >= k) break;
}
if (count >= k) end = mid - 1;
else {
start = mid + 1;
}
}
return start;
}
์ ํ์ฑO, ํจ์จ์ฑO ํต๊ณผ ์ฝ๋
function solution1(stones, k) { // ํจ์จ์ฑ ํต๊ณผ
let start = 1,
end = 200000000;
while (start <= end) {
const mid = Math.floor((start + end) / 2);
let count = 0;
for (const num of stones) {
if (num - mid <= 0) count++;
else count = 0;
if (count >= k) break;
}
if (count >= k) end = mid - 1;
else {
start = mid + 1;
}
}
return start;
}
์์ ๋ฒ์๊ฐ 20๋ง๊น์ง ๊ฐ๊ธฐ ๋๋ฌธ์ ๋จ์ํ ๋ฐ๋ณต๋ฌธ๋ง ๋๋ ค์ ํ๊ธฐ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฑฐ๋ผ๋ ๊ฑธ ์ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฑ ๋ดค์ ๋ ์ด๋ถํ์์ ์ฌ์ฉํด์ผ ํ ๊ฒ ๊ฐ์๋ค.
stones๋ฐฐ์ด ์์๋ค์ ๋ฒ์๋ 1 ์ด์ 200,000,000 ์ดํ์ธ ์์ฐ์๋ผ๊ณ ์ฃผ์ด์ก๊ธฐ ๋๋ฌธ์ start๋ฅผ 1๋ก, end๋ฅผ 200,000,000์ผ๋ก ๋๊ณ stones๋ฅผ ํ๋ฒ ๋๋๋ง๋ค mid๊ฐ์ ๊ฐฑ์ ํ๋ค.
for (const num of stones) {
if (num - mid <= 0) count++;
else count = 0;
if (count >= k) break;
}
์ด ๋ถ๋ถ์ ์ฐ์๋ 0์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ก์ง์ด๋ค. stones์ ๊ฐ ์์์ mid๋ฅผ ๋บ๊ฐ์ด 0๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ mid๊ฐ ํด๋น ์์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ ๋ป์ด๋ค. 1๋ถํฐ 200,000,000์ฌ์ด๋ฅผ ๋ฒ์๋ก ํด์ mid๋ฅผ ๊ณ์ ๊ฐฑ์ ํด์ stones์ ๋ฐ์ํด๋ณด๊ณ mid์ ์ผ์ชฝ ๋ฒ์๋ฅผ ํ์ํด์ผ ํ ์ง ์ค๋ฅธ์ชฝ ๋ฒ์๋ฅผ ํ์ํด์ผ ํ ์ง ์ ํํ๋ ๋ฐฉ์์ด๋ค.
count๊ฐ k๋ณด๋ค ํด ๊ฒฝ์ฐ, end๋ฅผ mid - 1๋ก ์ผ์ชฝ(์๋) ๊ฐ์ ํ์ํ๋๋กํ๊ณ , count๊ฐ k๋ณด๋ค ์์ ๊ฒฝ์ฐ, start๋ฅผ mid + 1๋ก ์ค๋ฅธ์ชฝ(์) ๊ฐ์ ํ์ํ๋๋ก ํ๋ค.
์๋ ์์ ๋ฅผ ํตํด ์์๋ณด์.
์ ์ถ๋ ฅ ์ #1
์ฒซ ๋ฒ์งธ ์น๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํ ๋๋ค๋์ ์ ํ ์ซ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
๋ ๋ฒ์งธ ์น๊ตฌ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํ ๋๋ค๋์ ์ ํ ์ซ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ธ ๋ฒ์งธ ์น๊ตฌ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์์ต๋๋ค.
์ธ ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํ ๋๋ค๋์ ์ ํ ์ซ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
๋ค ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด, ์ธ ๋ฒ์งธ ๋๋ค๋์์ ์ผ๊ณฑ ๋ฒ์งธ ๋๋ค๋๋ก ๋ค ์นธ์ ๊ฑด๋๋ฐ์ด์ผ ํฉ๋๋ค. ํ์ง๋ง k = 3 ์ด๋ฏ๋ก ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ต๋ 3๋ช ์ด ๋๋ค๋์ ๋ชจ๋ ๊ฑด๋ ์ ์์ต๋๋ค.
๋ง์ฝ mid๊ฐ 200,000,000๋ถํฐ ๊ณ์ 1/2์ฉ ์ค์ฌ์์ 5๊ฐ ๋๋ค๊ณ ์น์. ๊ทธ๋ผ num - mid๊ฐ <= 0์ธ ์ฐ์์ ์ธ ๋ถ๋ถ์ ์ต๋ ๊ธธ์ด๋ ์ ์ฒด ๊ธธ์ด๊ฐ ๋ ๊ฑฐ๋ค.
์ฌ๊ธฐ์ ๋ค์ end๋ฅผ 5 - 1 = 4 ๋ก ๊ฐฑ์ ํ๋ฉด mid๋ 2๊ฐ ๋๋ค. ๊ทธ๋ผ num - mid๊ฐ <= 0์ธ ์ฐ์์ ์ธ ๋ถ๋ถ์ ์ต๋ ๊ธธ์ด๋ 5๋ฒ์งธ์ 2 1 ์ด ๋ถ๋ถ์ผ๊ฑฐ๋ค.
2 < k์ด๋ฏ๋ก start = mid + 1 = 3์ผ๋ก ๊ฐฑ์ ํ๋ฉด mid๋ 3์ด ๋๋ค. ๊ทธ๋ผ num - mid๊ฐ <= 0์ธ ์ฐ์์ ์ธ ๋ถ๋ถ์ ์ต๋ ๊ธธ์ด๋ 4๋ฒ์งธ์ 3 2 1 ์ด ๋ถ๋ถ์ผ๊ฑฐ๋ค. 3 >= k์ด๋ฏ๋ก end๋ฅผ mid - 1 = 2๋ก ๊ฐฑ์ ๋๊ณ start <= end๋ฅผ ๋ง์กฑํ์ง ๋ชปํด while๋ฌธ์ ๋น ์ ธ๋์ค๊ฒ ๋๋ค.
๋๋ ์ด๋ถํ์์ ์ธ๋ฑ์ค์์ ํ์ฉํ๋ ๋ฒ๋ง ์์๋๋ฐ ์ด๋ฐ์์ผ๋ก ์์๋ค์ ์ต๋ ์ต์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ํ ์๋ ์๋ค๋ ๊ฑธ ์์๋ค. ๋ค์์ ์๋ฐ ๋ฌธ์ ๋์ค๋ฉด ์ ๋๋ก ํ์ฉํด๋ด์ผ์ง ..