Notice
Recent Posts
Recent Comments
Link
ยซ   2024/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Lennon FE

[๋ฐฑ์ค€ 10816๋ฒˆ] ์ˆซ์ž ์นด๋“œ2 - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(nodejs) ๋ณธ๋ฌธ

๐Ÿ”ฅ Algorithm/Baekjoon

[๋ฐฑ์ค€ 10816๋ฒˆ] ์ˆซ์ž ์นด๋“œ2 - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(nodejs)

Lennon 2022. 2. 3. 19:57
728x90
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/10816

 

10816๋ฒˆ: ์ˆซ์ž ์นด๋“œ 2

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync('dev/stdin').toString().trim().split('\n');

const binarySearch = (arr, num) => {
  let start = 0;
  let end = arr.length - 1;

  while (start <= end) {
    let middle = Math.floor((start + end) / 2);
    if (arr[middle][0] < num) {
      start = middle + 1;
    } else if (arr[middle][0] > num) {
      end = middle - 1;
    } else {
      return arr[middle][1];
    }
  }
  return 0;
};

const haveCard = input[1]
  .split(' ')
  .sort((a, b) => a - b)
  .map(Number);

const isCard = input[3].split(' ').map(Number);

const arr = [[haveCard[0], 1]];

for (let i = 1; i < haveCard.length; i++) {
  if (haveCard[i - 1] === haveCard[i]) {
    arr[arr.length - 1][1]++;
  } else {
    arr.push([haveCard[i], 1]);
  }
}
const answer = isCard.map((v) => {
  return binarySearch(arr, v);
});

console.log(answer.join(' '));

binarySearch => ์ด๋ถ„ ํƒ์ƒ‰ ํ•จ์ˆ˜

๋จผ์ € ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ ๋ฐฐ์—ด์„ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ณ , ์ค‘๋ณต๋œ ์นด๋“œ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

๊ทธ ํ›„ binarySearch๋ฅผ ์ด์šฉํ•ด logN ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•ด์ฃผ๋ฉด ๋!

๊ทธ๋ƒฅ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. 

728x90
๋ฐ˜์‘ํ˜•
Comments