๐ฉ๐ปโ๐ป๋ฌธ์ ๋งํฌ
[ํ๋ก๊ทธ๋๋จธ์ค 42885] ๊ตฌ๋ช
๋ณดํธ (Javascript)
โ๏ธIdea Sketch
2021-07-12
1. ๋ฌธ์ ์ดํด
- ๊ตฌ๋ช ๋ณดํธ๋ฅผ ์ต๋ํ ์ ๊ฒ ์ฌ์ฉ
2. ๋ชธ๋ฌด๊ฒ ์ ๋ ฌ
3. ๋ก์ง
- ๋ชธ๋ฌด๊ฒ ์์ ์ฌ๋๋ค๋ผ๋ฆฌ ๋ชจ์์ ๋ณด๋ด๊ธฐ
- ๋ชธ๋ฌด๊ฒ ์์ ์ฌ๋, ๋ชธ๋ฌด๊ฒ ํฐ ์ฌ๋ ์ง์ง์ด์ ๋ณด๋ด๊ธฐ
4. ๋ฌธ์ ์
- ๋ชธ๋ฌด๊ฒ ์์ ์ฌ๋๋ค๋ผ๋ฆฌ ๋ชจ์์ ๋ณด๋ด๊ณ ๋๋ฉด, limit/2๊ฐ ๋๋ ์ฌ๋๋ค์ ํ๋ช ์ฉ ๋ณด๋ด์ผ ํจ
- ๋ชธ๋ฌด๊ฒ ์์ ์ฌ๋, ํฐ ์ฌ๋ ์ง์ง์ด์ ๋ณด๋ผ ๊ฒฝ์ฐ [50, 50, 70, 80] ์ ์ถ๋ ฅ ์ 1๋ฒ์ ๋ง์กฑํ์ง ์์
5. ๋ก์ง
- limit/2๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋ถ๋ฅ๋ก ๋๋
- limit/2์์ left, right๊ฐ ๋์ด -> arr.indexOf(limit/2) ์ด๊ฑฐ๋ฅผ ์ธ ์๋ ์๊ณ ๋ง์ด์ง..?
- ์ข, ์ฐ์์ left, right
- sum์ด limit๋ณด๋ค ํฌ๋ฉด --> right--, cnt++
- sum์ด limit์ ๊ฐ์ผ๋ฉด --> left++, right--, cnt++
- sum์ด limit๋ณด๋ค ์์ผ๋ฉด
- sum += (left+1) ์ด limit๋ณด๋ค ์์ผ๋ฉด left++, sum += left
- sum += (left+1) ์ด limit์ ๊ฐ์ผ๋ฉด left++, cnt++
- sum += (left+1) ์ด limit๋ณด๋ค ํฌ๋ฉด left++, right--, cnt++
arr.sort((a, b) => a-b);
let cnt = 0;
let left = 0, right = arr.length-1;
let sum = arr[left] + arr[right];
let flag = false;
while(left <= right) {
if (sum === limit) {
cnt++;
flag = false;
sum = arr[++left] + arr[--right];
}
else if (sum > limit) {
if (flag === false) {
cnt++;
sum = arr[left] + arr[--right];
}
else {
cnt++;
sum = arr[left] + arr[--right];
}
}
else if (sum < limit) {
sum += arr[++left];
flag = true;
}
}
6. cnt ๋ก์ง
- Set()์ ์ฌ์ฉํด myset.delete(left), myset.delete(right)๋ฅผ ํ ๊น? --> ํจ์จ์ฑ๋ฌธ์ ์๊ธธ๋ฏ
- ์ธ๋ฑ์ค ์ด๋๋ง ํ ๊น left++ right--
โ๏ธ์์ค์ฝ๋
2021-07-12 ์ ํ์ฑ, ํจ์จ์ฑ ํต๊ณผ
function solution(arr, limit) {
let cnt = 0;
arr.sort((a, b) => a - b);
let left = 0, right = arr.length - 1;
let sum = arr[left] + arr[right];
let flag = false; // sum์ left๋ฅผ 2๋ฒ ์ด์ ๋ํ ๊ฒฝ์ฐ true
while (left <= right) {
if (left === right) return ++cnt;
if (sum === limit) {
cnt++;
flag = false;
sum = arr[++left] + arr[--right];
}
else if (sum > limit) {
cnt++;
flag = false;
sum = arr[left] + arr[--right];
}
else if (sum < limit) {
flag = true;
sum += arr[++left];
}
}
return cnt;
}
โ๏ธ๋ช ๋ต
function solution(people, limit) {
people.sort(function(a, b){return a-b});
for(var i=0, j=people.length-1; i < j; j--) {
if( people[i] + people[j] <= limit ) i++;
}
return people.length-i;
}