ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
์์์ N๊ฐ์ ์ซ์๊ฐ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋๋ค. N๊ฐ์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ค์ N๊ฐ์ ์ ์ค ํ ๊ฐ์ ์์ธ M์ด ์ฃผ์ด์ง๋ฉด์ด๋ถ๊ฒ์์ผ๋ก M์ด ์ ๋ ฌ๋ ์ํ์์ ๋ช ๋ฒ์งธ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.(๋จ ์ค๋ณต๊ฐ์ ์กด์ฌํ์ง ์์ต๋๋ค)
์ฝ๋
function solution(target, arr) {
let answer = 0;
arr.sort((a, b) => {return a - b});
let mid = Math.floor(arr.length/2);
while(mid !== 0) {
if(target === arr[mid]) {
answer = mid + 1;
break;
} else {
mid = Math.floor(mid/2);
}
}
return answer;
}
let arr = [23, 87, 65, 12, 57, 32, 99, 81]
console.log(solution(32, arr));
์ค๋ต
์ด ๋ฌธ์ ์์๋ ์ฒ์ mid ๊ฐ์ด target ๊ฐ๋ณด๋ค ์ปธ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ฐฐ์ด์ ๊ธธ์ด์ ๋ฐ์ผ๋ก ์ชผ๊ฐ์ ์ผ์ชฝ ๊ตฌ๊ฐ์ ํ์ํ๋ ์ ๋ฐฉ๋ฒ์ผ๋กํ๋ ธ์ง๋ง ๋ง์ฝ mid๊ฐ์ด target ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ ๊ตฌ๊ฐ์ ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์ ํ์ด๋ ์ณ์ง ๋ชปํ๋ค.
์ด๋ถ ํ์(Binary Search)
- ์ด๋ถ ํ์์ ์ฃผ์ ์กฐ๊ฑด: ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฐฐ์ด์ ์ ๋ ฌ๋์ด ์์ด์ผ ํจ
- ์ฒ์ ์ค๊ฐ์ ๊ฐ์ ์์์ ๊ฐ์ผ๋ก ์ ํํ์ฌ, ๊ทธ ๊ฐ๊ณผ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ ๋์ ๋น๊ต
- ๋์ ๋น๊ต ํ, ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ฌ๊ฐ๋ฉฐ ์ฐพ์๊ฐ
์ฝ๋
function solution(target, arr) {
let answer = 0;
arr.sort((a, b) => {return a - b});
let lt = 0; //์ผ์ชฝ ๊ตฌ๊ฐ
let rt = arr.length - 1; //์ค๋ฅธ์ชฝ ๊ตฌ๊ฐ
while(lt <= rt) {
let mid = Math.floor((lt + rt)/2);
if(arr[mid] === target) {
answer = mid + 1;
break;
}
else if(arr[mid] > target) rt = mid - 1; //์ค๊ฐ๊ฐ์ด target ๊ฐ๋ณด๋ค ํด ๊ฒฝ์ฐ_์ค๋ฅธ์ชฝ ๊ตฌ๊ฐ์ ๋ ์ด์ ํ์ธํ ํ์๊ฐ ์์
else lt = mid + 1; //์ค๊ฐ๊ฐ์ด target ๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ_์ผ์ชฝ ๊ตฌ๊ฐ์ ๋ ์ด์ ํ์ธํ ํ์๊ฐ ์์
}
return answer;
}
let arr = [23, 87, 65, 12, 57, 32, 99, 81]
console.log(solution(32, arr));
'์๊ณ ๋ฆฌ์ฆ > ํ๊ทธ ๋ณ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฌ๊ทํจ์์ ์คํ ํ๋ ์]์ด์ง์ ์ถ๋ ฅ (0) | 2021.07.27 |
---|---|
[๊ฒฐ์ ์๊ณ ๋ฆฌ์ฆ]๋ฎค์ง๋น๋์ค (0) | 2021.07.25 |
[๊ทธ๋ฆฌ๋]๊ฒฐํผ์ (0) | 2021.07.24 |
[๊ทธ๋ฆฌ๋]ํ์์ค ๋ฐฐ์ (0) | 2021.07.23 |
์ขํ ์ ๋ ฌ (0) | 2021.07.22 |
๋๊ธ