[TIL] 211025

Lee SyongΒ·2021λ…„ 10μ›” 25일
0

TIL

λͺ©λ‘ 보기
68/204
post-thumbnail

πŸ“ 였늘 ν•œ 것

  1. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제 풀이 - μ†Œμˆ˜ μ°ΎκΈ° / μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

  2. 무방ν–₯ κ·Έλž˜ν”„ / λ°©ν–₯ κ·Έλž˜ν”„ / λ„ˆλΉ„ μš°μ„  탐색 / κ·Έλž˜ν”„ λ°μ΄ν„°λ² μ΄μŠ€ / 가쀑 κ·Έλž˜ν”„


πŸ“– ν•™μŠ΅ 자료

  1. μ±… 'λˆ„κ΅¬λ‚˜ 자료 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜'

πŸ“š 배운 것

1. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제 풀이

1) Level 1 문제

(1) μ†Œμˆ˜ μ°ΎκΈ°

πŸ”Ž 처음 μž‘μ„±ν•œ 풀이

  • μ‹€μ œ μ±„μ μ—μ„œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 3κ°œκ°€ μ‹œκ°„ 초과둜 톡과 λͺ»ν–ˆλ‹€. λ‹Ήμ—°νžˆ νš¨μœ¨μ„± ν…ŒμŠ€νŠΈλŠ” 0점.
function solution(n) {
  let noPrimeCount = 1;
  for (let i = 2; i <= n; i++) {
    for (let j = 2; j < i; j++) {
      if (i % j === 0) {
        noPrimeCount++;
        break;
      }
    }
  }
  return n - noPrimeCount;
}

πŸ”Ž 두 번째 μž‘μ„±ν•œ 풀이

  • μ†Œμˆ˜λ₯Ό νŒλ³„ν•˜κΈ° μœ„ν•΄ 2λΆ€ν„° μ‹œμž‘ν•΄μ„œ ν•˜λ‚˜μ”© λ‚˜λˆ λ³΄λŠ” 방법 말고 또 뭐가 μžˆμ„κΉŒ. 이 λΆ€λΆ„μ—μ„œ μ‹œκ°„μ„ 많이 μ†Œμš”ν•˜λŠ” κ±° κ°™λ‹€.
function solution(n) {
  let nums = [];
  for (let i = 2; i <= n; i++) {
    nums.push(i);
  }

  const primes = nums.filter(num => {
    for (let i = 2; i < num; i++) {
      if (num % i === 0) {
        return false;
      }
    }
    return true;
  });

  return primes.length;
}

πŸ”Ž λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

function solution(n) {
  const primes = new Array(n+1).fill(true).fill(false, 0, 2);
  // πŸ’‘ λ°°μ—΄μ˜ 인덱슀λ₯Ό 숫자둜 ν™œμš©ν•  것
  // λ”°λΌμ„œ, n+1자리 배열을 true(μ†Œμˆ˜λ₯Ό 의미)둜 μ±„μš΄ ν›„
  // 0κ³Ό 1은 μ†Œμˆ˜κ°€ μ•„λ‹ˆλ―€λ‘œ μ•„μ˜ˆ μ²˜μŒλΆ€ν„° false둜 λ°”κΏ”μ€Œ
  
  for (let i = 2; i * i <= n; i++) { // πŸ’‘ iλŠ” (2 ~ 'n의 제곱근')κΉŒμ§€ 1μ”© μ¦κ°€μ‹œν‚΄
    if (primes[i] === true) { // λ°°μ—΄μ˜ i번째 μžλ¦¬μ— μžˆλŠ” 값이 true라면(즉, i = μ†Œμˆ˜)
      for (let j = i * i; j <= n; j += i) { // πŸ’‘ jλŠ” i * iλΆ€ν„° μ‹œμž‘λ˜λŠ” i의 배수λ₯Ό μ˜λ―Έν•¨
        primes[j] = false; // λ°°μ—΄μ˜ j번째 μžλ¦¬μ— μžˆλŠ” 값듀을 μ „λΆ€ false둜 λ°”κΏ”μ€Œ(∡ j β‰  μ†Œμˆ˜)
      }
    }
  }

  return primes.filter(e => e).length;
  // 값이 true인 μš”μ†Œ(=μ†Œμˆ˜)만 남긴 λ°°μ—΄μ˜ 길이(=μ†Œμˆ˜μ˜ 개수)λ₯Ό 리턴
}

13μž₯. κ·Έλž˜ν”„λ‘œ 뭐든지 μ—°κ²°ν•˜κΈ°

πŸ“Œ κ·Έλž˜ν”„λŠ” λ°μ΄ν„°λ“€μ˜ μ–΄λ–»κ²Œ μ—°κ²°λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό νŒŒμ•…ν•˜κΈ° μ‰¬μš΄ 자료 ꡬ쑰이닀.

πŸ“Œ κ·Έλž˜ν”„ μš©μ–΄

정점간선
λ…Έλ“œλ‘œ ν‘œν˜„κ° μ„ μœΌλ‘œ ν‘œν˜„
ex. μ‚¬λžŒex. μ‚¬λžŒ κ°„ 관계

1) κ·Έλž˜ν”„

(1) μ„€λͺ… 및 μ½”λ“œ κ΅¬ν˜„

πŸ’‘ λŒ€ν‘œμ μœΌλ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ΄μš©ν•΄ κ΅¬ν˜„ κ°€λŠ₯ν•˜λ‹€

πŸ”Ž 무방ν–₯ κ·Έλž˜ν”„

  • μƒν˜Έ 관계λ₯Ό ν‘œν˜„ν•˜λŠ” κ·Έλž˜ν”„ ex) 페이슀뢁 친ꡬ
  • 그림으둜 ν‘œν˜„ν•  λ•Œ λ‹¨μˆœ 선을 μ΄μš©ν•œλ‹€

2차원 배열에 관계 리슀트λ₯Ό μ €μž₯ν•  수 μžˆλ‹€.
이 경우, alice의 전체 친ꡬ 리슀트λ₯Ό μ•ŒκΈ° μœ„ν•΄ O(N)이 κ±Έλ¦°λ‹€.

const relationships = [
  ['alice', 'bob'],
  ['bob', 'cynthia'],
  ['alice', 'diana'],
  ['bob', 'diana']
];

λŒ€μ‹ μ— κ·Έλž˜ν”„λ₯Ό μ΄μš©ν•˜λ©΄, O(1) λ§Œμ— 전체 친ꡬ 리슀트 검색이 κ°€λŠ₯ν•˜λ‹€.

p.263
Ruby둜 κ΅¬ν˜„λœ μ½”λ“œ β†’ JavaScript둜 λ³€ν™˜

const friends = {
  'alice': ['bob', 'diana'],
  'bob': ['alice', 'cynthia', 'diana'],
  'cynthia': ['bob'],
  'diana': ['alice', 'bob']
};

console.log(friends.alice); // ['bob', 'diana'] β†’ O(1) λ§Œμ— 검색 κ°€λŠ₯

πŸ”Ž λ°©ν–₯ κ·Έλž˜ν”„

  • λ°©ν–₯성이 μžˆλŠ” 관계λ₯Ό ν‘œν˜„ν•˜λŠ” κ·Έλž˜ν”„ ex) νŠΈμœ„ν„° νŒ”λ‘œμš°
  • 그림으둜 ν‘œν˜„ν•  λ•Œ ν™”μ‚΄ν‘œλ₯Ό μ΄μš©ν•œλ‹€
const follwees = {
  'alice': ['bob', 'cynthia'],
  'bob': ['cynthia'],
  'cynthia': ['bob']
};

πŸ’‘ 객체 지ν–₯ κ΅¬ν˜„λ„ κ°€λŠ₯ν•˜λ‹€

class Person {
  constructor(name) {
    this.name = name;
    this.friends = [];
  }

  add_friend(friend) {
    this.friends.push(friend);
  }
}

const mary = new Person('mary');
const peter = new Person('peter');
mary.add_friend(peter);
peter.add_friend(mary);

2) λ„ˆλΉ„ μš°μ„  탐색

  • κ·Έλž˜ν”„λ₯Ό μˆœνšŒν•˜λŠ” λ°©λ²•μœΌλ‘œ λ„ˆλΉ„ μš°μ„  탐색과 깊이 μš°μ„  탐색이 μžˆλ‹€
  • 이 μ±…μ—μ„œλŠ” λ„ˆλΉ„ μš°μ„  탐색 μ•Œκ³ λ¦¬μ¦˜λ§Œ 닀룬닀
  • λ„ˆλΉ„ μš°μ„  탐색 μ•Œκ³ λ¦¬μ¦˜μ€ μ²˜λ¦¬ν•  정점을 μΆ”μ ν•˜κΈ° μœ„ν•΄ 큐(Queue)λ₯Ό μ‚¬μš©ν•œλ‹€

(1) μ„€λͺ…

[ 예제 ]

λ§ν¬λ“œμΈμ€ 직접 λ„€νŠΈμ›Œν¬ 외에 2μ°¨, 3μ°¨ 컀λ„₯μ…˜μ„ μ •ν•  수 μžˆλŠ” κΈ°λŠ₯을 가지고 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, (μ•¨λ¦¬μŠ€ - λ°₯ - μ‹ μ‹œμ•„)κ°€ μ—°κ²°λ˜μ–΄ μžˆμ„ λ•Œ, μ•¨λ¦¬μŠ€λŠ” λ°₯을 톡해 μ‹ μ‹œμ•„μ™€ μ—°κ²°λ˜λ―€λ‘œ, μ‹ μ‹œμ•„λŠ” μ•¨λ¦¬μŠ€μ˜ 2μ°¨ 컀λ„₯μ…˜μ΄λ‹€.

μ΄λŸ¬ν•œ 비직접적인 컀λ„₯μ…˜μ„ λͺ¨λ‘ 포함해 μ•¨λ¦¬μŠ€μ˜ 전체 λ„€νŠΈμ›Œν¬μ— μžˆλŠ” 이름을 ν‘œμ‹œν•˜κ³ μž ν•  λ•Œ κ·Έλž˜ν”„ 탐색을 μ΄μš©ν•  수 μžˆλ‹€

[ μ½”λ“œ μ„€λͺ… ]

  • νμ—μ„œ 정점을 μ‚­μ œ(shift)ν•΄ 이λ₯Ό ν˜„μž¬ 정점(curr_vertex)으둜 μ§€μ •ν•œλ‹€

  • 각 ν˜„μž¬ μ •μ λ§ˆλ‹€ κ·Έ μ •μ μ˜ 인접 정점을 각각(forEach) λ°©λ¬Έν•œλ‹€

  • πŸ’‘ queue 외에 visited_vertex에도 λ°©λ¬Έν•œ λ…Έλ“œλ₯Ό ν•˜λ‚˜μ”© μΆ”κ°€ν•΄ 기둝해놓은 ν›„ μ•Œκ³ λ¦¬μ¦˜μ΄ μ’…λ£Œλμ„ λ•Œ μ΄λŸ¬ν•œ λ…Έλ“œλ“€μ˜ visited 속성을 λ‹€μ‹œ false둜 λ°”κΏ”μ€€λ‹€ (이미 λ°©λ¬Έν•œ 정점은 큐에 넣지 μ•ŠκΈ° μœ„ν•΄)

(2) μ½”λ“œ κ΅¬ν˜„

p.275
Ruby둜 κ΅¬ν˜„λœ μ½”λ“œ β†’ JavaScript둜 λ³€ν™˜

μœ„μ˜ κ·Έλž˜ν”„ 객체 지ν–₯ κ΅¬ν˜„ μ½”λ“œμ— 'λ„ˆλΉ„ μš°μ„  탐색' λ©”μ„œλ“œλ₯Ό 좔가함

class Person {
  constructor(name) {
    this.name = name;
    this.friends = [];
    this.visited = false; // μΆ”κ°€
  }

  // κ·Έλž˜ν”„ λ§Œλ“€κΈ° (관계 μ„€μ •ν•˜κΈ°) ❗
  add_friend(friend) {
    this.friends.push(friend);
  }

  // λ„ˆλΉ„ μš°μ„  탐색 ❗
  display_network() {
    // λ°©λ¬Έν•  λ…Έλ“œλ₯Ό 기둝할 visited_vertex
    const visited_vertex = [this];
    // 큐λ₯Ό μƒμ„±ν•œλ‹€. μ²˜μŒμ—λŠ” 루트 정점을 ν¬ν•¨ν•œλ‹€.
    const queue = [this];
    this.visited = true;

    while (queue.length) {
      let curr_vertex = queue.shift(); // νλ‘œλΆ€ν„° μ œκ±°ν•œ 정점이 ν˜„μž¬ 정점이닀
      console.log(curr_vertex.name);
      curr_vertex.visited = true;

      // ν˜„μž¬ μ •μ μ˜ 인접 정점을 λͺ¨λ‘ 큐에 μΆ”κ°€ν•œλ‹€
      curr_vertex.friends.forEach(friend => {
        if (!friend.visited) {
          visited_vertex.push(friend);
          queue.push(friend);
          friend.visited = true;
        }
      });
    }

    // μ•Œκ³ λ¦¬μ¦˜μ˜ μ’…λ£Œλœ ν›„ 각 λ…Έλ“œμ˜ 'visited' 속성을 false둜 ν• λ‹Ήν•œλ‹€
    visited_vertex.forEach(friend => friend.visited = true);
  }
}

// κ·Έλž˜ν”„ λ§Œλ“€κΈ° (관계 μ„€μ •ν•˜κΈ°)
const alice = new Person('alice');
const bob = new Person('bob');
const candy = new Person('candy');
const derek = new Person('derek');
const elaine = new Person('elaine');
alice.add_friend(bob);
alice.add_friend(candy);
alice.add_friend(derek);
alice.add_friend(elaine);

const fred = new Person('fred');
const helen = new Person('helen');
bob.add_friend(fred);
bob.add_friend(helen);

const gina = new Person('gina');
const irena = new Person('irena');
derek.add_friend(gina);
derek.add_friend(irena);

// κ·Έλž˜ν”„ 확인
console.log(alice);

// λ„ˆλΉ„ μš°μ„  탐색 - alice의 전체 λ„€νŠΈμ›Œν¬μ— μžˆλŠ” 이름 ν‘œμ‹œ
alice.display_network();

(3) λΉ… 였 (정점 처리 + κ°„μ„  처리)

[ 정점 처리 ]
μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ λ°”λ‘œλŠ”,
κ·Έλž˜ν”„μ— V개의 정점이 μžˆμ„ λ•Œ, νμ—μ„œ V번 μ‚­μ œν•œλ‹€.
이λ₯Ό λΉ…μ˜€ ν‘œκΈ°λ²•μœΌλ‘œ O(V)라고 λΆ€λ₯Έλ‹€.

μ΄λ•Œ, μ§€κΈˆκΉŒμ§€μ²˜λŸΌ N개의 정점이 μžˆμ„ λ•Œ νš¨μœ¨μ„±μ„ O(N)이라고 ν•˜μ§€ μ•Šκ³  O(V)라고 ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ? μ΄λŠ” λ„ˆλΉ„ μš°μ„  탐색이 λ‹¨μˆœνžˆ μ •μ λ§Œ μ²˜λ¦¬ν•˜λŠ” 게 μ•„λ‹ˆλΌ 간선도 μ²˜λ¦¬ν•˜λŠ” 단계λ₯Ό μΆ”κ°€λ‘œ ν¬ν•¨ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μœ„ μ½”λ“œμ—μ„œ ν˜„μž¬ μ •μ μ˜ 인접 정점을 λͺ¨λ‘ 큐에 μΆ”κ°€ν•˜λŠ” λΆ€λΆ„λ§Œ λ–Όμ–΄μ„œ μ‚΄νŽ΄λ³΄μž.

curr_vertex.friends.forEach(friend => {
  if (!friend.visited) {
    visited_vertex.push(friend);
    queue.push(friend);
    friend.visited = true;
  }
});

ν˜„μž¬ μ •μ μ˜ 인접 μ •μ λ“€μ˜ visited 속성이 false일 λ•Œλ§Œ 큐에 κ·Έ 인접 정점을 μΆ”κ°€ν•˜λ„λ‘ ν–ˆμ§€λ§Œ, visited 속성이 true인지 false인지 μ•ŒκΈ° μœ„ν•΄μ„œλŠ” μ–΄μ°¨ν”Ό λͺ¨λ“  인접 정점듀을 μ „λΆ€ λ°©λ¬Έν•΄μ•Ό ν•œλ‹€.

예λ₯Ό λ“€μ–΄, ν˜„μž¬ 정점이 bob인 κ²½μš°μ—, fredλŠ” visited 속성이 falseμ΄λ―€λ‘œ 큐에 집어 λ„£κ³ , aliceλŠ” visited 속성이 trueμ΄λ―€λ‘œ 큐에 μ§‘μ–΄λ„£μ§€λŠ” μ•ŠλŠ”λ‹€. μ΄λ•Œ 큐에 집어넣든 μ•ˆ 집어넣든 방문은 ν•˜λ―€λ‘œ λ‹¨κ³„μ—λŠ” 포함이 λœλ‹€.

μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λ©΄, λ„ˆλΉ„ μš°μ„  νƒμƒ‰μ—μ„œ μΈμ ‘ν•œ 정점에 λ°©λ¬Έν•˜λŠ” νšŸμˆ˜λŠ” κ·Έλž˜ν”„μ— μžˆλŠ” κ°„μ„  수의 2배이닀.
μ΄λŠ” 각 간선이 두 정점을 μ—°κ²°ν•˜κ³ , λͺ¨λ“  정점에 λŒ€ν•΄ μΈμ ‘ν•œ 정점을 λͺ¨λ‘ ν™•μΈν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.이 κ³Όμ •μ—μ„œ 각 간선은 2λ²ˆμ”© 쓰인닀.

[ κ°„μ„  처리 ]
κ·Έλž˜ν”„μ— E개의 간선이 μžˆμ„ λ•Œ, μΈμ ‘ν•œ 정점을 2E번 ν™•μΈν•œλ‹€.
이λ₯Ό λΉ…μ˜€ ν‘œκΈ°λ²•μœΌλ‘œ O(E)라고 λΆ€λ₯Έλ‹€. (λΉ…μ˜€λŠ” μƒμˆ˜ λ¬΄μ‹œ)

πŸ’‘ μ •λ¦¬ν•˜λ©΄,

λ„ˆλΉ„ μš°μ„  νƒμƒ‰μ˜ νš¨μœ¨μ„±μ€ O(V+E)라고 ν•  수 μžˆλ‹€.


3) κ·Έλž˜ν”„ λ°μ΄ν„°λ² μ΄μŠ€

[ 예제 ]

μ„œλ‘œκ°€ λͺ¨λ‘ μ—°κ²°λœ 5λͺ…μ˜ 친ꡬ둜 이뀄진 μ†Œμ…œ λ„€νŠΈμ›Œν¬κ°€ μžˆλ‹€κ³  ν•˜μž.

(1) 전톡적인 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ΄μš©ν•΄ λ‹€μ„― λͺ…μ˜ 정보λ₯Ό μ €μž₯ν•  수 μžˆλ‹€.
ν•œ ν…Œμ΄λΈ”μ—λŠ” 각 μ‚¬μš©μžμ˜ 개인 정보λ₯Ό, λ‹€λ₯Έ ν…Œμ΄λΈ”μ—λŠ” μΉœκ΅¬λ“€ κ°„ 관계(user_id, friend_id)λ₯Ό μ €μž₯ν•  수 μžˆλ‹€.

μ΄λ•Œ, 5λͺ… 쀑 1λͺ…인 Aκ°€ μžμ‹ μ˜ λͺ¨λ“  μΉœκ΅¬λ“€μ˜ 개인 정보λ₯Ό μš”μ²­ν•œλ‹€κ³  ν•˜μž.

λ¨Όμ €, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 관계 ν…Œμ΄λΈ”μ—μ„œ A의 user_idκ°€ μ ν˜€ μžˆλŠ” λͺ¨λ“  쀄을 μ°Ύμ•„ 전체 friend_id 리슀트λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. κ·Έ ν›„, 개인 정보 ν…Œμ΄λΈ”μ—μ„œ friend_id에 λŒ€μ‘ν•˜λŠ” 각 쀄을 μ°Ύμ•„μ•Ό ν•œλ‹€.

(μ˜ˆμ‹œλ‘œ λ“  κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ 경우) 이진 검색이 κ°€λŠ₯ν•˜λ―€λ‘œ 각 친ꡬλ₯Ό κ²€μƒ‰ν•˜λŠ” λ°λŠ” O(logN)이 κ±Έλ¦°λ‹€. μ •λ¦¬ν•˜λ©΄, μΉœκ΅¬κ°€ Mλͺ… 일 λ•Œ 정보λ₯Ό κ°€μ Έμ˜€λŠ” νš¨μœ¨μ„±μ€ O(M logN)이 λœλ‹€.

(2) κ·Έλž˜ν”„ λ°μ΄ν„°λ² μ΄μŠ€

κ·Έλž˜ν”„ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ΄μš©ν•΄ λ‹€μ„― λͺ…μ˜ 정보λ₯Ό μ €μž₯ν•  μˆ˜λ„ μžˆλ‹€.
데이터 베이슀 λ‚΄ 각 정점은 각 μ‚¬μš©μžμ˜ λͺ¨λ“  정보λ₯Ό μ €μž₯ν•œλ‹€.

λ§ˆμ°¬κ°€μ§€λ‘œ, 5λͺ… 쀑 1λͺ…인 aκ°€ μžμ‹ μ˜ λͺ¨λ“  μΉœκ΅¬λ“€μ˜ 개인 정보λ₯Ό μš”μ²­ν•œλ‹€κ³  ν•˜μž.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κ·Έλž˜ν”„ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ Aλ₯Ό 찾은 후에 A와 4λͺ…μ˜ μΉœκ΅¬λ“€μ΄ μ—°κ²°λ˜μ–΄ μžˆλŠ” 간선을 μˆœνšŒν•΄ 정보λ₯Ό κ°€μ Έμ˜¨λ‹€.

A와 4λͺ…μ˜ μΉœκ΅¬λ“€μ΄ κ°„μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ μžˆμœΌλ―€λ‘œ 각 친ꡬ의 정보λ₯Ό κ°€μ Έμ˜€λŠ” λ°λŠ” λ”± ν•œ 단계가 걸릴 뿐이닀. μ •λ¦¬ν•˜λ©΄, μΉœκ΅¬κ°€ Nλͺ…일 λ•Œ 정보λ₯Ό κ°€μ Έμ˜€λŠ” νš¨μœ¨μ„±μ€ O(N)이 λœλ‹€.


4) 가쀑 κ·Έλž˜ν”„

(1) μ„€λͺ…

  • 가쀑 κ·Έλž˜ν”„λž€ κ·Έλž˜ν”„μ˜ 간선에 좔가적인 정보가 ν¬ν•¨λœ κ·Έλž˜ν”„λ₯Ό λ§ν•œλ‹€.

  • 무방ν–₯ κ·Έλž˜ν”„
    ex. 각 λ„μ‹œλ₯Ό μ •μ μœΌλ‘œ ν•˜λ©°, 각 정점을 μž‡λŠ” κ°„μ„ μ—λŠ” λ„μ‹œλ“€ κ°„ 거리λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μˆ«μžκ°€ λΆ™μ–΄ μžˆλŠ” κ·Έλž˜ν”„

  • λ°©ν–₯ κ·Έλž˜ν”„
    ex. 각 λ„μ‹œλ₯Ό μ •μ μœΌλ‘œ ν•˜λ©°, 각 정점을 μž‡λŠ” κ°„μ„ μ—λŠ” ν•œ λ„μ‹œμ—μ„œ λ‹€λ₯Έ λ„μ‹œλ‘œ κ°€λŠ” ν•­κ³΅λ£Œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μˆ«μžκ°€ λΆ™μ–΄ μžˆλŠ” κ·Έλž˜ν”„ (간선은 ν™”μ‚΄ν‘œκ°€ μžˆλŠ” 선이고, ν•­κ³΅λ£ŒλŠ” μ„œλ‘œ λ‹€λ₯Ό 수 μžˆλ‹€)

(2) μ½”λ“œ κ΅¬ν˜„

  • 가쀑 κ·Έλž˜ν”„λŠ” 인접 정점을 ν‘œν˜„ν•  λ•Œ ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ΄μš©ν•΄μ•Ό ν•œλ‹€.

p.284
Ruby둜 κ΅¬ν˜„λœ μ½”λ“œ β†’ JavaScript둜 λ³€ν™˜

class City {
  constructor(name) {
    this.name = name;
    this.routes = {}; // ν•΄μ‹œ ν…Œμ΄λΈ” o, λ°°μ—΄ x
  }

  add_route(city, price) {
    this.routes[city] = price; // 간선에 μΆ”κ°€ 정보λ₯Ό 포함
  }
}

const dallas = new City('Dallas');
const toronto = new City('Toronto');
dallas.add_route(toronto, 138);
toronto.add_route(dallas, 216);

✨ 내일 ν•  것

  1. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제 풀이

  2. μ±… 계속 읽기

profile
λŠ₯λ™μ μœΌλ‘œ μ‚΄μž, ν–‰λ³΅ν•˜κ²ŒπŸ˜

0개의 λŒ“κΈ€