roqkf

์Šคํ„ฐ๋”” ๊ธฐ๋ก 21 ๋ณธ๋ฌธ

๐Ÿ’ป Development/Study

์Šคํ„ฐ๋”” ๊ธฐ๋ก 21

ahyeon7 2023. 1. 9. 22:52

๋ฌธ์ œ ๋ชฉ๋ก

โค๏ธ‍๐Ÿ”ฅ ๋ฉ€๋ฆฌ ๋›ฐ๊ธฐ

function solution(n) {
  // ๊ฒฝ์šฐ์˜ ์ˆ˜??
  // n๊นŒ์ง€์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•˜๊ณ  1234567 ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๋ฆฌํ„ด

  let fibo = [0, 1];
  for (let i = 2; i <= n; i++) {
    fibo.push((fibo[i - 1] + fibo[i - 2]) % 1234567);
  }
}

solution(4);

/*
1 => 1 
! 1 ๋ฐฉ๋ฒ• = 1
2 => 1, 1 / 2 = 2
! 2 ๋ฐฉ๋ฒ• = 2
3 => 1, 1, 1 / 2, 1 / 1, 2 = 3
! 3 ๋ฐฉ๋ฒ• = 3
4 => 1, 1, 1, 1 / 2, 2 / 2, 1, 1 / 1, 2, 1 / 1, 1, 2 = 5
! 4 ๋ฐฉ๋ฒ• = 5
5 => 1, 1, 1, 1, 1 / 2, 2, 1 / 2, 1, 2 / 1, 2, 2 / 2, 1, 1, 1 / 1, 2, 1, 1 / 1, 1, 2, 1 / 1, 1, 1, 2
! 5 ๋ฐฉ๋ฒ• = 8
6 => 1, 1, 1, 1, 1, 1 / 2, 2, 2 / 1, 1, 2, 2 / 2, 2, 1, 1 / 1, 2, 1, 2 / 1, 2, 2, 1 / 2, 1, 1, 2 / 2, 1, 2, 1 / 1, 1, 1, 1, 2 / 1, 1, 1, 2, 1 / 1, 1, 2, 1, 1 / 1, 2, 1, 1, 1 / 2, 1, 1, 1, 1
! 6 ๋ฐฉ๋ฒ• = 13

๋„๋‹ฌ ๋ฐฉ๋ฒ•์˜ ์ˆ˜ = [1, 2, 3, 5, 8, 13 ...]

1 + 2 = 3
2 + 3 = 5
3 + 5 = 8

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด??

*/

์ž…๋ ฅ๋ฐ›์€ ๋งค๊ฐœ๋ณ€์ˆ˜ n์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. 1๋ถ€ํ„ฐ n๊นŒ์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ณ  ๋ช‡ ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์ด ๋‚˜์™”๋Š”์ง€ ๋ณด๋‹ค๋ณด๋‹ˆ ํ”ผ๋ณด๋‚˜์น˜๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค! ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ–ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค

const factorial = (n) => {
    if(n === 0) return BigInt(1);
    let num = BigInt(1);
    let a = BigInt(n);
    while(a != BigInt(1)){
	@@ -10,6 +10,7 @@ const factorial = (n) => {
}

function solution(n) {
    // https://bhsmath.tistory.com/153
    // n๊ฐœ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ• n!/ ๊ฐ™์€๊ฑฐ 3๊ฐœ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฒ• 3!, ๊ฐ™์€๊ฑฐ 2๊ฐœ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฒ• 2!
    // 2 2, 1, 1, 1 
    // 5!/(3! * 2!) = 10
    // ๋ฌถ์Œ์„ ๊ตฌํ•˜๋Š” ๊ณต์‹?
    // ๋‘๊ฐœ์”ฉ ๋ฝ‘๋Š” ๊ฒฝ์šฐ n / 2 
    // n์ด 4์ผ ๊ฒฝ์šฐ 2, 1, 0 ๋ฌถ์Œ ์ˆ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ํƒ๋จ.
    // 2, 2 2
    // 1, 1 1 2, 1 2 1, 2 1 1
    // 0, 1 1 1 1
    // n 3
    // 1, 2 1, 2 1
    // 0  1 1 1
    let answer = BigInt(0);
    const maxTwoNum = Math.floor(n / 2);
    for(let twoNum = 0 ; twoNum <= maxTwoNum ; twoNum++){
        const oneNum = n - (twoNum * 2)
        const length = twoNum + oneNum;
        const value = factorial(length) / (factorial(oneNum) * factorial(twoNum));
        answer += value;
    }
    return Number(answer % BigInt(1234567));
}

ํšจ๊ทผ๋‹˜ ์ฝ”๋“œ ํšจ๊ทผ๋‹˜์€ ํ”ผ๋ณด๋‚˜์น˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋Š” ์ˆœ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ดํ•˜์…จ๋‹ค. ์ƒ‰๋‹ฌ๋ผ์„œ ์ข‹์•˜๋‹ค... ํšจ๊ทผ๋‹˜์ด ์ฃผ์„์— ๋‹ด์•„์ฃผ์‹  https://bhsmath.tistory.com/153 ์ด๊ณณ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ดํ•ด๋ฅผ ํ•˜์˜€๋‹ค.

โค๏ธ‍๐Ÿ”ฅ H-Index

function solution(citations) {
  /*
  H-์ง€์ˆ˜ => ํŠน์ • ์—ฐ๊ตฌ์›์˜ ์—ฐ๊ตฌ ์„ฑ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์ง€ํ‘œ, ๋ฐœํ‘œ ๋…ผ๋ฌธ์ˆ˜์™€ ํ”ผ์ธ์šฉ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํ•™๋ฌธ์  ์—ญ๋Ÿ‰ ์ธก์ •
 H-์ง€์ˆ˜ ๊ตฌํ•˜๊ธฐ => ์ „์ฒด ๋…ผ๋ฌธ ์ค‘ ๋งŽ์ด ์ธ์šฉ๋œ ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„, ํ”ผ์ธ์šฉ์ˆ˜๊ฐ€ ๋…ผ๋ฌธ์ˆ˜์™€ ๊ฐ™์•„์ง€๊ฑฐ๋‚˜ ํ”ผ์ธ์šฉ์ˆ˜๊ฐ€ ๋…ผ๋ฌธ์ˆ˜๋ณด๋‹ค ์ž‘์•„์ง€๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž!

 ์ฐธ๊ณ : https://www.ibric.org/myboard/read.php?Board=news&id=270333
  */

  /* ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„, ์ธ์šฉ ํšŸ์ˆ˜ h๊ฐ€ hํŽธ์ด ๋  ๋•Œ ๋ฐ”๋กœ ๋ฆฌํ„ด */

  citations.sort((a, b) => b - a);

  for (let h = 0; h < citations.length; h++) {
    //ํ”ผ์ธ์šฉ์ˆ˜๊ฐ€ ๋…ผ๋ฌธ์ˆ˜๋ณด๋‹ค ์ž‘์•„์ง€๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ๋ฆฌํ„ด
    if (citations[h] <= h) {
      return h;
    }
  }

  return citations.length;
}
solution([3, 0, 6, 1, 5]);
/*
 ? ๋งŽ์ด ์ธ์šฉ๋œ ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„, 
 ? ์ธ์šฉ์ˆ˜๊ฐ€ ๋…ผ๋ฌธ์ˆ˜์™€ ๊ฐ™์•„์ง€๊ฑฐ๋‚˜ ํ”ผ์ธ์šฉ์ˆ˜๊ฐ€ ๋…ผ๋ฌธ์ˆ˜๋ณด๋‹ค ์ž‘์•„์ง€๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž

ํ”ผ์ธ์šฉ์ˆ˜          ๋…ผ๋ฌธ์ˆ˜      boolean
6                 1          false
5                 2          false
3                 3          true   (๋‹น์ฒจ!!)
1                 4
0                 5


*/

๋ฌธ์ œ ์ž์ฒด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ๊ฒ€์ƒ‰ํ•ด์„œ ๋…ผ๋ฌธ์„ ์ฐธ๊ณ ํ•ด์„œ ์ดํ•ดํ•œ ๋ฌธ์ œ... ์ฒ˜์Œ์— ์ดํ•ด๋ฅผ ๋ชป ํ•˜๊ฒ ์—ˆ๋Š”๋ฐ ์ •๋ง ๋ฌธ์ œ์— ๋‚˜์˜จ ๋ฌธ์žฅ ๊ทธ๋Œ€๋กœ์˜€๋‹ค. ํ”ผ์ธ์šฉ์ˆ˜๊ฐ€ ๋…ผ๋ฌธ์ˆ˜๋ณด๋‹ค ์ž‘์•„์ง€๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์— ๋ฐ”๋กœ ๋ฆฌํ„ด์„ ํ•˜๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค!

โค๏ธ‍๐Ÿ”ฅ [1์ฐจ ์บ์‹œ]

function solution(cacheSize, cities) {
  /* 
  LRU(์ œ์ผ ์˜ค๋ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€ ๊ต์ฒด)
  Set ๊ฐ์ฒด ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด๋ณด์ž!!
  1. hasํ•ด์„œ ๋„ฃ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€๋ถ€ํ„ฐ ๋จผ์ € ํ™•์ธ
  2. ์žˆ๋Š” ๊ฒฝ์šฐ ์ง€๊ธˆ ๋„ฃ์„ ๋ฐ์ดํ„ฐ ์‚ญ์ œ, cHit๋‹ˆ๊นŒ +1
     ์—†๋Š” ๊ฒฝ์šฐ ์บ์‹œ ๊ฝ‰ ์ฐธ => ์บ์‹œ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์ €์žฅ ํ›„, ์ฒซ๋ฒˆ์งธ ๊ฐ’ ์‚ญ์ œ, cMiss๋‹ˆ๊นŒ +5
              ์บ์‹œ ์•ˆ ์ฐธ => cMiss๋‹ˆ๊นŒ +5
  3. ์ง€๊ธˆ ๋„ฃ์„ ๋ฐ์ดํ„ฐ add ํ•ด ์ฃผ๊ธฐ

 */

  let runtime = 0;
  const cache = new Set();
  const cHit = 1;
  const cMiss = 5;

  if (cacheSize === 0) return cities.length * cMiss;
  cities = cities.map((ele) => ele.toUpperCase());

  for (let i = 0; i < cities.length; i++) {
    const boolean = cache.has(cities[i]);
    console.log(cities[i]);
    console.log(cache.has(cities[i]));

    if (boolean) {
      cache.delete(cities[i]);
      runtime += cHit;
    } else if (cache.size === cacheSize) {
      const first = [...cache][0];
      cache.delete(first);
      runtime += cMiss;
    } else {
      runtime += cMiss;
    }
    cache.add(cities[i]);
  }
  return runtime;
  console.log(runtime);
}

solution(3, [
  'Jeju',
  'Pangyo',
  'Seoul',
  'NewYork',
  'LA',
  'Jeju',
  'Pangyo',
  'Seoul',
  'NewYork',
  'LA',
]);

/*
cache hit => 1
cache miss => 5

inoutput ex) (3, ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"])
! miss        miss      miss        miss        miss        miss          miss
1 "Jeju"     "Jeju"     "Jeju"      "Pangyo"    "Seoul"     "NewYork"    "LA"
2            "Pangyo"   "Pangyo"    "Seoul"     "NewYork"   "LA"         "Jeju"
3                       "Seoul"     "NewYork"   "LA"        "Jeju"       "Pangyo"

! miss        miss
1 "Jeju"      "Pangyo"
2 "Pangyo"    "Seoul"
3 "Seoul"     "NewYork"

=> 10 * 5 = 50

inoutput ex) (3, ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"])
! miss    miss      miss    hit       hit       hit       hit       hit       hit
1 Jeju    Jeju      Jeju    Pangyo    Seoul     Jeju      Pangyo    Seoul     Jeju
2         Pangyo    Pangyo  Seoul     Jeju      Pangyo    Seoul     Jeju      Pangyo
3                   Seoul   Jeju      Pangyo    Seoul     Jeju      Pangyo    Seoul

=> 15 + 6 = 21

*/

์ €๋ฒˆ ์Šคํ„ฐ๋”” ๋•Œ ์ง€์›๋‹˜์ด Set ๊ฐ์ฒด๋ฅผ ์“ฐ์‹  ๊ฒƒ ๋ณด๊ณ  ๊ผญ ํ•œ ๋ฒˆ ์จ ๋ณด๊ณ  ์‹ถ์–ด์„œ ์›๋ž˜๋Š” findindex๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด๋ณด๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€ index๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค ์œ„์น˜์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์›Œ์„œ Set์„ ์ด์šฉํ•ด๋ณด์ž๊ณ  ํ•˜๊ณ  ์„ฑ๊ณต์‹œํ‚จ ์ฝ”๋“œ์ด๋‹ค ์ƒ๊ฐ๋ณด๋‹ค ๋‹ค๋ฃจ๊ธฐ ๊ฐ„ํŽธํ•ด์„œ Set ๋‚˜๋ฆ„ ์ข‹์€ ๋†ˆ์ด๊ตฌ๋‚˜...์‹ถ์—ˆ๋‹ค. ์ •์ฒ˜๊ธฐ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๋‹ค์‹œ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ ๋ฌธ์ œ๋“ค์€ ๋Œ€์ฒด์ ์œผ๋กœ ์œ ์šฉํ•œ ๋ฌธ์ œ๋“ค์ด ๋งŽ์•„์„œ ์ข‹์•˜๋‹ค.

'๐Ÿ’ป Development > Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šคํ„ฐ๋”” ๊ธฐ๋ก 23  (0) 2023.01.09
์Šคํ„ฐ๋”” ๊ธฐ๋ก 22  (0) 2023.01.09
์Šคํ„ฐ๋”” ๊ธฐ๋ก 20  (0) 2022.12.27
์Šคํ„ฐ๋”” ๊ธฐ๋ก 18  (0) 2022.12.19
์Šคํ„ฐ๋”” ๊ธฐ๋ก 17  (0) 2022.12.16