🦁_21.12.14 TIL

BoriΒ·2021λ…„ 12μ›” 14일
1
post-thumbnail

21λ…„ 12μ›” 14일

πŸ“ 자료ꡬ쑰 및 μ•Œκ³ λ¦¬μ¦˜

체크 리슀트

  • ν”Œλž«νΌμ— μ΅μˆ™ν•΄μ§€κΈ°
  • μ‚¬μš© κ°€λŠ₯ν•œ 라이브러리 확인
  • μ–Έμ–΄ 선택(속도 : c++, 풀이 : python)
  • μ½”λ“œ μŠ€λ‹ˆνŽ«(트리, 검색, μˆœμ—΄, μ‘°ν•©, μ΅œλ‹¨κ²½λ‘œ(ex λ‹€μ΅μŠ€νŠΈλΌ)), Cheat sheet와 쒅이 미리 μ€€λΉ„
  • μœ μš©ν•œ 라이브러리 정리
  • μ˜ˆμ™Έμ²˜λ¦¬ ν•˜κΈ°

λͺΈν’€κΈ°

문제1) 1λΆ€ν„° 10,000κΉŒμ§€ 8μ΄λΌλŠ” μˆ«μžκ°€ 총 λͺ‡λ²ˆ λ‚˜μ˜€λŠ”κ°€?

8이 ν¬ν•¨λ˜μ–΄ μžˆλŠ” 숫자의 갯수λ₯Ό μΉ΄μš΄νŒ… ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 8μ΄λΌλŠ” 숫자λ₯Ό λͺ¨λ‘ μΉ΄μš΄νŒ… ν•΄μ•Ό ν•œλ‹€.
예λ₯Ό λ“€μ–΄ 8808은 3, 8888은 4둜 μΉ΄μš΄νŒ… ν•΄μ•Ό 함
https://codingdojang.com/scode/393?answer_mode=hide

// 문제 풀이
// 빈 λ°°μ—΄ λ§Œλ“œλŠ” 방법
Array(10);
let x = Array(10);
x[2] = undefined;
x[3] = null;
x;
// [λΉ„μ–΄μžˆμŒ x 2, undefined, null, λΉ„μ–΄μžˆμŒ x 6]
x.length = 20;
x;
// [λΉ„μ–΄μžˆμŒ x 2, undefined, null, λΉ„μ–΄μžˆμŒ x 16]
Array(10).fill(0);
Array(10).fill(10);
// Array(100).fill().map((_, i) => i + 1)
// [...Array(100)].map((_, i) => i + 1)
Array(100)
  .fill(1)
  .map((val, idx) => val + idx);
".".repeat(10);
".".repeat(10).split("."); // lenght : 11
".".repeat(9).split("."); // lenght : 10
Array.from("abc");
Array.from("a", repeat(10));
Array.from("ab", repeat(10));

Array(100)
  .fill(1)
  .map((val, idx) => val + idx) + "";

(
  Array(100)
    .fill(1)
    .map((val, idx) => val + idx) + ""
).split("8").length - 1; 
// 8이 1개인 경우 8을 κΈ°μ€€μœΌλ‘œ λ‚˜λ‰˜λ©΄μ„œ 배열이 2개둜 μͺΌκ°œμ§ => length - 1을 ν•˜λŠ” 이유

문제2) 1μ°¨μ›μ˜ 점듀이 μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έ 쀑 κ°€μž₯ 거리가 짧은 κ²ƒμ˜ μŒμ„ 좜λ ₯ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ‹œμ˜€. (단 μ λ“€μ˜ 배열은 λͺ¨λ‘ μ •λ ¬λ˜μ–΄μžˆλ‹€κ³  κ°€μ •ν•œλ‹€.)

예λ₯Ό λ“€μ–΄ S={1, 3, 4, 8, 13, 17, 20} 이 μ£Όμ–΄μ‘Œλ‹€λ©΄, 결과값은 (3, 4)κ°€ 될 것이닀.
https://codingdojang.com/scode/408?langby=javascript#answer-filter-area

let s = [1, 3, 4, 8, 13, 17, 20];
let arr = new Array();
// for (let i = 0; i < s.length - 1; i++) {
//   console.log(s[i + 1] - s[i]);
// }
//  μœ„μ™€ λ™μΌν•œ μ½”λ“œ
for (let i = 1; i < s.length; i++) {
  // console.log(s[i] - s[i - 1]);
  arr.push(s[i] - s[i - 1]);
}

// arr.indexOf(5)
let result = arr.indexOf(Math.min(...arr));
console.log(s[result], s[result + 1]);

// λ‹€λ₯Έ 풀이
let s = [1, 3, 4, 8, 13, 17, 20];
// let ss = [3, 4, 8, 13, 17, 20];

// const zip = (a, b) => a.map((v, i) => [v, b[i]]);
const zip = (a, b) => a.map((val, idx) => [val, b[idx]]);

// zip(s.slice(), s.slice(1)).slice(0, -1);
// zip(s.slice(0, s.length - 1), s.slice(1));
let pairs = zip(s.slice(), s.slice(1)).slice(0, -1);

// -1 μˆœμ„œ μœ μ§€
// 1 μˆœμ„œ λ°”κΏˆ
// μ˜€λ¦„μ°¨μˆœ μ •λ ¬ :
//  뒀에 값이 더 크면 μˆœμ„œ μœ μ§€
//  뒀에 값이 μž‘μœΌλ©΄ μˆœμ„œ λ°”κΏˆ
function compare(a, b) {
  if (a[1] - a[0] < b[1] - b[0]) {
    return -1;
  }
  if (a[1] - a[0] > b[1] - b[0]) {
    return 1;
  }
  return 0;
}

pairs.sort(compare);
pairs.sort(compare)[0];

// μ‰¬μš΄ 풀이
let s = [1, 3, 4, 8, 13, 17, 20];

const zip = (a, b) => a.map((val, idx) => [val, b[idx]]);
let pairs = zip(s.slice(0, s.length - 1), s.slice(1));

// μ΄ˆκΈ°κ°’, forλ¬Έ μ•ˆμ—μ„œλŠ” μ΅œμ†Ÿκ°’μ„ λΉ„κ΅ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©
// MAX_SAFE_INTEGERλ₯Ό 주둜 μ‚¬μš©
// let init = Number.MAX_SAFE_INTEGER;
// let init = Number.MIN_SAFE_INTEGER;
let init = pairs[0][1] - [0][0];
// resultλŠ” μ΅œμ’… κ²°κ³Όκ°’
let result = [];

for (let i of pairs) {
  // console.log(i);
  if (init > i[1] - i[0]) {
    init = i[1] - i[0];
    result = i;
  }
}

console.log(result);

πŸ“Ž μŠ€νƒ(Stack)

class Stack {
  constructor() {
    this.arr = [];
  }

  push(data) {
    this.arr.push(data);
  }

  pop(index = this.arr.length - 1) {
    // indexκ°€ 없을 경우
    if (index === this.arr.length - 1) {
      return this.arr.pop();
    }
    // indexκ°€ μžˆμ„κ²½μš°
    // let result = this.arr[index];
    // this.arr = [...this.arr.slice(0, index), ...this.arr.slice(index + 1)];
    let result = this.arr.splice(index, 1);
    return result;
  }

  empty() {
    if (arr.length === 0) {
      return true;
    } else {
      return false;
    }
  }

  top() {
    return this.arr[this.arr.length - 1];
  }

  bottom() {
    return this.arr[0];
  }
}

let s = new Stack();
s.push(10);
s.push(20);
s.push(30);
s.push(100);
s.push(200);
s.push(300);

s.pop();
console.log(s);

s.pop(2);
console.log(s);

πŸ“Ž μ—°κ²°λ¦¬μŠ€νŠΈ(Linked list)

  • κ°œλ… : https://en.wikipedia.org/wiki/Linked_list
  • μ•Œκ³ λ¦¬μ¦˜ μ‹œκ°ν™” : https://visualgo.net/ko

  • μ—°κ²°λ¦¬μŠ€νŠΈ, λ©”λͺ¨λ¦¬ νš¨μœ¨μ„ μœ„ν•΄ μ‚¬μš©λ˜λŠ” κ²½μš°κ°€ 많음
    => Javascriptμ—μ„œλŠ” λ©”λͺ¨λ¦¬ 효율이 그닀지 쒋지 λͺ»ν•¨
const list = {
  head: {
    value: 90,
    next: {
      value: 2,
      next: {
        value: 77,
        next: {
          value: 35,
          next: null, // λ§ˆμ§€λ§‰ 값은 null을 가리킨닀
        },
      },
    },
  },
};

class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    let init = new Node("init");
    this.head = init;
    this.tail = init;

    this.ν˜„μž¬λ…Έλ“œ = undefined;
    this.λ°μ΄ν„°μˆ˜ = 0;
  }

  length() {
    return this.λ°μ΄ν„°μˆ˜;
  }

  append(data) {
    let μƒˆλ‘œμš΄λ…Έλ“œ = new Node(data);
    // λ§ˆμ§€λ§‰ 값이 nullμ—μ„œ μƒˆλ‘œμš΄ λ…Έλ“œκ°€ 됨
    this.tail.next = μƒˆλ‘œμš΄λ…Έλ“œ;
    // λ§ˆμ§€λ§‰ λ…Έλ“œλŠ” μƒˆλ‘œμš΄ λ…Έλ“œκ°€ 됨
    this.tail = μƒˆλ‘œμš΄λ…Έλ“œ;
    this.λ°μ΄ν„°μˆ˜ += 1;
  }

  toString() {
    let μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ = this.head;
    μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ = μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ.next;

    let s = "";
    for (let i = 0; i < this.λ°μ΄ν„°μˆ˜; i++) {
      s += `${μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ.data},`;
      μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ = μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ.next;
    }
    // 맨 λ§ˆμ§€λ§‰μ— μ½€λ§ˆμ™€ 띄어쓰기가 μžˆμœΌλ―€λ‘œ -1 μž‘μ„±
    return s.slice(0, -1);
  }

  get fullData() {
    let μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ = this.head;
    μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ = μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ.next;

    let s = "";
    for (let i = 0; i < this.λ°μ΄ν„°μˆ˜; i++) {
      s += `${μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ.data},`;
      μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ = μˆœνšŒμš©ν˜„μž¬λ…Έλ“œ.next;
    }
    return JSON.parse(`[${s.slice(0, -1)}]`);
  }
}

// console
l = new LinkedList();
l.append(1);
l.append(2);
l.append(3);
l.append(10);
l.append(20);
l.append(30);
l.length();

πŸ“ 온라인 κ°•μ˜ μˆ˜κ°•

πŸ“Ž μ½”λ“œλΌμ΄μ–Έ - 일단 λ§Œλ“œλŠ” Javascript


마무리

  • μˆ˜μ—… 전에 λ¦¬μ•‘νŠΈλž‘ νŒŒμ΄μ–΄λ² μ΄μŠ€ μ…‹νŒ…λ§Œ ν•΄λ†“μž
    => μ‹€νŒ¨!^^ μ•„μœ  λ‚˜ μžμ‹  λ‹΅λ‹΅β™‘
  • μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜ νƒ€μ΄ν‹€λ§Œ 듀어도 λ§‰λ§‰ν–ˆλŠ”λ° μ„€λͺ…을 듀을 수 μžˆμ–΄μ„œ μ’‹μ•˜μŠ΅λ‹ˆλ‹€.
    => 전에 κ³΅λΆ€ν•΄λ’€λ˜ 것이 또 도움이 λ˜μ—ˆλ‹€!
  • μ• ν”ŒνŽœμŠ¬ ꡬ맀 기념 이벀트 κ·Έλ¦Ό 그리기 λ„ˆλ¬΄ μž¬λ°Œλ„€μš” 호호호호
    => λ„ˆλ¬΄ μ¦κ±°μ›ŒλΌ

0개의 λŒ“κΈ€