
[์ธํ๋ฐ ์น์
7] ๋ง๊ตฌ๊ฐ ์ ํ๊ธฐ (Javascript)
์ ๋ฃ ๊ฐ์์ธ ๊ด๊ณ๋ก ๋ฌธ์ ์ค๋ช
์ ์๋ตํฉ๋๋ค.
โ๏ธIdea Sketch
2021-06-28
1. ์ธ์ ํ ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋๊ฐ ๋๋๋ก, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ์ต๋๊ฑฐ๋ฆฌ
- 3๋ง๋ฆฌ ๋ง์ ๋ฐฐ์น
- 1, 4, 9๋ก ๋ฐฐ์นํ ๊ฒฝ์ฐ ์ธ์ ํ ๋ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ต๋
- ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ๋ง์ ์ต๋๊ฑฐ๋ฆฌ๋ 4-1 = 3
2. ๋ ๋ง์ ์ต๋๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ๋ฏ๋ก
- ๋ ๋ง ์ฌ์ด์ ๋ชจ๋ ์ข
๋ฅ์ ๊ฑฐ๋ฆฌ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก, ์ด๋ถ๊ฒ์
- left, right๋ ๋ณด๋ค ๋จ์ํ๊ฒ ๊ตฌํ
- ๋ ๋ง ์ฌ์ด์ ์ต์๊ฑฐ๋ฆฌ๋ฅผ mid๋ผ ํ์ ๋, ๋ง๊ตฌ๊ฐ์ ๋ฃ์ ์ ์๋ ๋ง์ ์ด ๋ช๋ง๋ฆฌ์ธ์ง ํ์ธ
| let left = Math.min(...arr), right = Math.max(...arr); |
| |
| while (left <= right) { |
| let mid = Math.floor((left + right) / 2); |
| let cnt = count(arr, target); |
| |
| if (cnt === mid) return mid; |
| else if (cnt < mid) right = mid-1; |
| else if (cnt > mid) left = mid+1; |
| } |
3. if (cnt === mid) ์ธ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด return ํ๋ฉด ์๋๋ค.
- mid-1, mid-2, โฆ ๋ ๋ฌธ์ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์๋ค.
| if (cnt <= mid) { |
| res = mid; |
| right = mid-1; |
| } |
| else if (cnt > mid) left = mid+1; |
4. count(arr, mid) ๊ตฌํ
- ๋ง ์ฌ์ด์ ์ต์๊ฑฐ๋ฆฌ๊ฐ mid์ผ ๋, ๋ง๊ตฌ๊ฐ์ ๋ฃ์ ์ ์๋ ๋ง์ด ๋ช๋ง๋ฆฌ์ธ์ง return
- ์ด๊ธฐ๊ฐ cnt = 1, index = arr[0];
- arr[i]๊ฐ index + mid๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด cnt++, index = arr[i]
| function count(arr, mid) { |
| let cnt = 1, index = arr[0]; |
| |
| for (let i=1; i<arr.length; i++) { |
| if (arr[i] >= index + mid) { |
| cnt++; |
| index = arr[i]; |
| } |
| } |
| |
| return cnt; |
| } |
โ๏ธ์์ค์ฝ๋
2021-06-28
| function count(arr, mid) { |
| let cnt = 1, index = arr[0]; |
| |
| for (let i=1; i<arr.length; i++) { |
| if (arr[i] >= index + mid) { |
| cnt++; |
| index = arr[i]; |
| } |
| } |
| |
| return cnt; |
| } |
| |
| function solution(arr, target) { |
| let res = 0; |
| arr.sort((a, b) => a-b); |
| let left = arr[0], right = arr[arr.length-1]; |
| |
| |
| while (left <= right) { |
| let mid = Math.floor((left + right) / 2); |
| let cnt = count(arr, target); |
| |
| if (cnt <= mid) { |
| res = mid; |
| right = mid-1; |
| } |
| else if (cnt > mid) left = mid+1; |
| } |
| |
| return res; |
| } |