Skip to content

Conversation

@oh-chaeyeon
Copy link
Contributor

๐Ÿ“Œ ํ‘ผ ๋ฌธ์ œ


๐Ÿ“ ๊ฐ„๋‹จํ•œ ํ’€์ด ๊ณผ์ •

7. Reverse integer

  • ๋ฌธ์ œ : 32๋น„ํŠธ ์ •์ˆ˜ x์˜ ์ˆซ์ž ์ž๋ฆฟ์ˆ˜๋ฅผ ๋’ค์ง‘์–ด ์ƒˆ๋กœ์šด ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ผ~
  • ์ ‘๊ทผ : ์ฃผ์–ด์ง„ ์ •์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ž๋ฆฟ์ˆ˜๋ฅผ x % 10 ์„ ํ†ตํ•ด ์ถ”์ถœํ•ด์„œ, ๊ฒฐ๊ณผ๊ฐ’์— 10์„ ๊ณฑํ•ด ์ž๋ฆฟ์ˆ˜๋ฅผ ํ•œ ์นธ ์˜ฌ๋ฆฌ๊ณ  ์ถ”์ถœ๋œ ์ž๋ฆฟ์ˆ˜๋ฅผ ๋”ํ•ด ๋’ค์ง‘์–ด ์ƒˆ๋กœ์šด ์ •์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋„๋ก ํ–ˆ์Œ.
var reverse = function (x) {
  let num = 0; //๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•  ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
  const INT_MIN = -Math.pow(2, 31); //32๋น„ํŠธ ์ •์ˆ˜์˜ ์ตœ์†Œ๊ฐ’
  const INT_MAX = Math.pow(2, 31) - 1; //32๋น„ํŠธ ์ •์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’

  while (x !== 0) {   // x๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    let digit = x % 10;
    x = (x - digit) / 10;

    num = num * 10 + digit;

    if (num < INT_MIN || num > INT_MAX) { // ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด
      return 0;
    }
  }

  return num;
};

743. Network Delay Time

  • ๋ฌธ์ œ : ์ฃผ์–ด์ง„ ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ์—์„œ ํŠน์ • ๋…ธ๋“œ์—์„œ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ผ ๋•Œ, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์‹ ํ˜ธ๋ฅผ ๋ฐ›๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ (๋งŒ์•ฝ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜)

  • ์ ‘๊ทผ : ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™œ์šฉ - ๋ชจ๋“  ๊ฐ„์„ ์„ ์ตœ๋Œ€ n-1๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ (+์ฑ—gpt)

  • ์˜ˆ์ œ : ์ž…๋ ฅ: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
    ๊ณผ์ •
    ์ดˆ๊ธฐํ™” : minTime = [Infinity, Infinity, 0, Infinity, Infinity]
    -> ๋ฐ˜๋ณต 1 :
    2 โ†’ 1: minTime[1] = 0 + 1 = 1
    2 โ†’ 3: minTime[3] = 0 + 1 = 1
    3 โ†’ 4: minTime[4] = 1 + 1 = 2
    ๊ฒฐ๊ณผ : [Infinity, 1, 0, 1, 2]
    -> ๋ฐ˜๋ณต ์ข…๋ฃŒ (๋” ์ด์ƒ ๊ฐฑ์‹  ์—†์Œ).
    ๊ฒฐ๊ณผ : ์ตœ๋Œ€ ์‹œ๊ฐ„ = 2

var networkDelayTime = function (times, n, k) { 
  const minTime = new Array(n + 1).fill(Infinity); //๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋„๋‹ฌ ์‹œ๊ฐ„์„ ๋ฌดํ•œ๋Œ€๋กœ ์„ค์ •
  minTime[k] = 0;

  for (let i = 1; i < n; i++) {
    for (const [u, v, w] of times) { // ๋ชจ๋“  ๊ฐ„์„ ์„ ์ˆœํšŒํ•˜๋„๋ก
      if (minTime[u] !== Infinity && minTime[u] + w < minTime[v]) {
        minTime[v] = minTime[u] + w;  // ๋” ์งง์€ ๊ฒฝ๋กœ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ๊ฐฑ์‹ ๋จ
      }
    }
  }

  const maxTime = Math.max(...minTime.slice(1)); //1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ n๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋Œ€ ์‹œ๊ฐ„ ๊ณ„์‚ฐ
  return maxTime === Infinity ? -1 : maxTime;  //๋„๋‹ฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด -1 ๋ฐ˜ํ™˜, ์•„๋‹ˆ๋ฉด ์ตœ๋Œ€ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜
};

39. Combination Sum

  • ๋ฌธ์ œ : ์ฃผ์–ด์ง„ ์ˆซ์ž ๋ฐฐ์—ด์—์„œ ๋ชฉํ‘œ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ณ ์œ ํ•œ ์กฐํ•ฉ์„ ์ฐพ๋Š” ๋ฌธ์ œ (๋ชฉํ‘œ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก)
var combinationSum = function (candidates, target) {
  const dp = Array.from({ length: target + 1 }, () => []); //dp ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
  dp[0] = [[]]; //ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ-> ๋นˆ๋ฐฐ์—ด

  for (let i = 0; i < candidates.length; i++) {
    for (let j = candidates[i]; j <= target; j++) {
      const combinations = dp[j - candidates[i]]; //ํ˜„์žฌ ์ˆซ์ž๋ถ€ํ„ฐ ๋ชฉํ‘œ๊ฐ’๊นŒ์ง€
      for (const combination of combinations) { //ํ˜„์žฌ ์ˆซ์ž๋ฅผ ๋นผ๊ณ  ๋‚จ์€ ๊ฐ’์—์„œ ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ๋“ค
        dp[j].push([...combination, candidates[i]]);
      }
    }
  }

  return dp[target]; // ์ตœ์ข…์ ์œผ๋กœ ๋ชฉํ‘œ๊ฐ’์— ๋„๋‹ฌํ•˜๋Š” ๋ชจ๋“  ์กฐํ•ฉ ๋ฐ˜ํ™˜
};

2013. Detect Squares

  • ๋ฌธ์ œ : ์ฃผ์–ด์ง„ ์ ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ํŠน์ • ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์„ธ ์ ์„ ์„ ํƒํ•ด ์ถ•์— ๋งž์ถ˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฌธ์ œ
  • ์ ‘๊ทผ : ์ ์˜ ์ขŒํ‘œ์™€ ํ•ด๋‹น ์ ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Map์„ ์‚ฌ์šฉํ•จ.
var DetectSquares = function () {
  this.pointCount = new Map();
};

/**
 * @param {number[]} point
 * @return {void}
 */
DetectSquares.prototype.add = function (point) {
  const [x, y] = point;
  const key = `${x},${y}`;
  this.pointCount.set(key, (this.pointCount.get(key) || 0) + 1);
};

/**
 * @param {number[]} point
 * @return {number}
 */
DetectSquares.prototype.count = function (point) {
  const [x, y] = point;
  let totalSquares = 0;

  for (const key of this.pointCount.keys()) {
    const [px, py] = key.split(",").map(Number);

    if (Math.abs(px - x) !== Math.abs(py - y) || px === x || py === y) continue;

    const corner1 = `${px},${y}`;
    const corner2 = `${x},${py}`;

    const countCurrent = this.pointCount.get(key) || 0;
    const countCorner1 = this.pointCount.get(corner1) || 0;
    const countCorner2 = this.pointCount.get(corner2) || 0;

    totalSquares += countCurrent * countCorner1 * countCorner2;
  }

  return totalSquares;
};

57. Insert Interval

  • ๋ฌธ์ œ : ์ฃผ์–ด์ง„ ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ตฌ๊ฐ„ ๋ฐฐ์—ด์— ์ƒˆ ๊ตฌ๊ฐ„์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฒน์น˜๋Š” ๊ตฌ๊ฐ„์ด ์žˆ์œผ๋ฉด ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฌธ์ œ
  • ์ ‘๊ทผ : ์ƒˆ ๊ตฌ๊ฐ„์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋๋‚˜๋Š” ๋ชจ๋“  ๊ตฌ๊ฐ„์„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ, ์ƒˆ ๊ตฌ๊ฐ„๊ณผ ๊ฒน์น˜๋Š” ๊ตฌ๊ฐ„์„ ์ฐพ์•„ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ƒˆ ๊ตฌ๊ฐ„์˜ ์‹œ์ž‘๊ณผ ๋์„ ์—…๋ฐ์ดํŠธ.. ์ตœ์ข…์ ์œผ๋กœ, ๋‚จ์•„ ์žˆ๋Š” ๊ตฌ๊ฐ„์„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ  ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•จ.
var insert = function (intervals, newInterval) {
  const result = [];
  let i = 0;

  while (i < intervals.length && intervals[i][1] < newInterval[0]) {
    result.push(intervals[i]);
    i++;
  }

  while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
    newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
    newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
    i++;
  }
  result.push(newInterval);

  while (i < intervals.length) {
    result.push(intervals[i]);
    i++;
  }

  return result;
};

์–ด๋ ต๋‹ค.....

@oh-chaeyeon oh-chaeyeon self-assigned this Dec 4, 2024
@oris8 oris8 requested review from CitrusSoda and hyunow December 4, 2024 05:55
@oris8 oris8 merged commit 1f2944b into master Dec 10, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants