[TIL] 211022

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

TIL

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

πŸ“ 였늘 ν•œ 것

  1. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제 풀이 - 콜라츠 μΆ”μΈ‘ / μžμ—°μˆ˜ 뒀집어 λ°°μ—΄λ‘œ λ§Œλ“€κΈ° / ν–‰λ ¬μ˜ λ§μ…ˆ / μ •μˆ˜ 제곱근 νŒλ³„ / 제일 μž‘μ€ 수 μ œκ±°ν•˜κΈ°

  2. Math.sqrt() / Math.pow()


πŸ“š 배운 것

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

1) Level 1 문제

(1) 콜라츠 μΆ”μΈ‘

πŸ”Ž λ‚΄κ°€ μž‘μ„±ν•œ 풀이

function solution(num) {
  let result = num;
  let count = 0;

  if (result === 1) {
    return 0;
  }

  while (result > 1 && count < 500) {
    if (result % 2 === 0) {
      result = result / 2;
      count++;
    } else if (result % 2 !== 0) {
      result = result * 3 + 1;
      count++;
    }
  }

  if (count === 500) {
    return -1;
  }

  return count;
}

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

  • λ‚΄ 풀이와 λΉ„μŠ·ν•˜μ§€λ§Œ 훨씬 κΉ”λ”ν•˜λ‹€

  • (λ‚΄ 풀이) ꡳ이 μƒˆλ‘œμš΄ result λ³€μˆ˜λ₯Ό λ§Œλ“€μ–΄μ„œ num을 ν• λ‹Ήν•  ν•„μš”κ°€ μ—†μ—ˆλ‹€.

  • (λ‚΄ 풀이) while λ¬Έκ³Ό return κ°’ λΆ€λΆ„μ—μ„œ 쑰건뢀 μ‚Όν•­ μ—°μ‚°μžλ‘œ κ°„κ²°ν•˜κ²Œ ν‘œν˜„ κ°€λŠ₯ν–ˆλ‹€.

function solution(num) {
  let count = 0;
  
  while (num > 1 && count < 500) {
    num%2 === 0 ? num = num/2 : num = num*3+1;
    count++;
  }
  
  return num === 1 ? count : -1;
}

(2) μžμ—°μˆ˜ 뒀집어 λ°°μ—΄λ‘œ λ§Œλ“€κΈ°

πŸ”Ž λ‚΄κ°€ μž‘μ„±ν•œ 풀이

function solution(n) {
  return (n + '').split('').map(s => Number(s)).reverse();
}

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

  • λͺ«κ³Ό λ‚˜λ¨Έμ§€ μ—°μ‚° ν™œμš©
function solution(n) {
  var arr = [];

  do {
    arr.push(n % 10);
    n = Math.floor(n / 10);
  } while (n > 0);

  return arr;
}

(3) ν–‰λ ¬μ˜ λ§μ…ˆ

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

  • 예제 ν…ŒμŠ€νŠΈλŠ” μ „λΆ€ ν†΅κ³Όν–ˆλŠ”λ° μ‹€μ œ μ±„μ μ—μ„œ 0점 λ§žμ•˜λ‹€.

  • μ§„μ§œ 예제 ν…ŒμŠ€νŠΈλ§Œ κ³ λ €ν•œ λ‹΅μ•ˆμ΄μ—ˆλ‹€. arr1[0].lengthκ°€ 3 이상이면 무쑰건 μ˜€λ‹΅μ΄ λ‚˜μ˜¬ μˆ˜λ°–μ—.

function solution(arr1, arr2) {
  const arr = [];

  arr1.forEach((item, index) => {
    if (arr1[0].length === 1) {
      const a = arr1[index][0] + arr2[index][0];
      arr.push([a]);
    } else {
      const a = arr1[index][0] + arr2[index][0];
      const b = arr1[index][1] + arr2[index][1];
      arr.push([a, b]);
    }
  });

  return arr;
}

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

  • for λ£¨ν”„λ‘œ λ°©ν–₯을 λ°”κΏ¨λ‹€.

  • νš¨μœ¨μ„± ν…ŒμŠ€νŠΈκ°€ μ—†μ–΄μ„œ ν†΅κ³ΌλŠ” ν–ˆμ§€λ§Œ, μ‹œκ°„μ΄ 많이 κ±Έλ¦°λ‹€.

function solution(arr1, arr2) {
  const answer = [];
  for (let i = 0; i < arr1.length; i++) {
    const arr = [];
    for (let j = 0; j < arr1[0].length; j++) {
      const elem  = arr1[i][j] + arr2[i][j];
      arr.push(elem);
    }
    answer.push(arr);
  }
  return answer;
}

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

  • 처음 μž‘μ„±ν•œ ν’€μ΄μ—μ„œ 이런 νλ¦„μœΌλ‘œ μž‘μ„±ν•˜κ³  μ‹Άμ—ˆλ˜ κ±° κ°™λ‹€. μˆ˜μ •ν•˜λŠ” κ³Όμ •μ—μ„œ forEach()λ₯Ό ν•œλ²ˆ 더 썼닀가 λκΉŒμ§€ μž‘μ„±μ„ λͺ»ν•˜κ² μ–΄μ„œ for λ£¨ν”„λ‘œ λ°©ν–₯을 ν‹€μ—ˆλŠ”λ° μ΄λ ‡κ²Œ μ§κ΄€μ μœΌλ‘œ μž‘μ„±μ΄ κ°€λŠ₯ν–ˆλ‹€λ‹ˆ.
function solution(arr1, arr2) {
  return arr1.map((a, i) => a.map((b, j) => b + arr2[i][j]));
}

(4) μ •μˆ˜ 제곱근 νŒλ³„

πŸ”Ž λ‚΄κ°€ μž‘μ„±ν•œ 풀이

function solution(n) {
  let x = 1;
  while (x <= n) {
    if (x ** 2 === n) {
      return (x + 1) ** 2;
    } else {
      if (x ** 2 > n) {
        return -1;
      }
      x++;
    }
  }
}

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

  • switch λ¬Έκ³Ό Math.sqrt(), Math.pow() ν™œμš©

  • νš¨μœ¨μ„±μ΄ 훨씬 쒋은 풀이닀.

function solution(n) {
  switch (n % Math.sqrt(n)) {
    case 0:
      return Math.pow(Math.sqrt(n) + 1, 2);
    default:
      return -1;
  }
}

πŸ’‘ Math.sqrt()와 Math.pow()

// square root(제곱근)
const sqrt = Math.sqrt(16);
console.log(sqrt); // 4

// power(κ±°λ“­ 제곱)
const pow = Math.pow(3, 4);
console.log(pow); // 81 (3⁴)

(5) 제일 μž‘μ€ 수 μ œκ±°ν•˜κΈ°

πŸ”Ž λ‚΄κ°€ μž‘μ„±ν•œ 풀이 1

  • 선택 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν–ˆλ˜ μ½”λ“œμ™€ λΉ„μŠ·ν•˜κ²Œ μž‘μ„±ν•  수 μžˆμ„ κ±° κ°™μ•„μ„œ ν•΄λ΄€λ‹€.
function solution(arr) {
  if (arr.length === 1) {
    return [-1];
  }

  let minIndex = 0;
  let nextIndex = minIndex + 1;

  while (nextIndex < arr.length) {
    if (arr[minIndex] > arr[nextIndex]) {
      minIndex = nextIndex;
    }
    nextIndex++;
  }

  arr.splice(minIndex, 1);

  return arr;
}

πŸ”Ž λ‚΄κ°€ μž‘μ„±ν•œ 풀이 2

  • μ–΄μ œ 배운 μ „κ°œ μ—°μ‚°μžλ₯Ό μ“Έ 수 μžˆμ„ κ±° κ°™μ•„μ„œ μž‘μ„±ν•΄λ΄€λŠ”λ° νš¨μœ¨μ„±μ΄ 많이 μ•ˆ μ’‹λ‹€.
function solution(arr) {
  if (arr.length === 1) {
    return [-1];
  }

  const cloneArr = [...arr];
  cloneArr.sort((a, b) => a - b);
  const minIndex = arr.indexOf(cloneArr[0]);
  arr.splice(minIndex, 1);

  return arr;
}

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

  • λ°°μ—΄μ—μ„œ κ°€μž₯ μž‘μ€ μš”μ†Œλ₯Ό μ°ΎκΈ° μœ„ν•΄ arr을 λ³΅μ‚¬ν•΄μ„œ μ •λ ¬ν•˜λŠ” λŒ€μ‹ , κ°„λ‹¨νžˆ Math.min()을 μ‚¬μš©ν–ˆλ‹€. μ „κ°œ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œ 건 λ˜‘κ°™μ€λ° Math.min()을 생각 λͺ»ν–ˆλ‹€. νš¨μœ¨μ„±μ΄ 훨씬 μ’‹μ•„μ‘Œλ‹€.
function solution(arr) {
  if (arr.length === 1) {
    return [-1];
  }

  arr.splice(arr.indexOf(Math.min(...arr)), 1);
  return arr;
}

✨ 내일 ν•  것

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

  2. μ±… 계속 읽기

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

0개의 λŒ“κΈ€