TIL_20.07.14 πŸƒπŸ½β€β™‚οΈπŸƒπŸ½β€β™‚οΈ

Doum KimΒ·2020λ…„ 7μ›” 14일
0

TIL

λͺ©λ‘ 보기
11/71
post-thumbnail

Codestates pre course

Pre Hiring Assessments

μ˜€λŠ˜μ€ 프리 μ½”μŠ€ λ§ˆμ§€λ§‰ μΌμ •μ΄μž μ΄λ¨Έμ‹œλΈŒ μ½”μŠ€ λ“€μ–΄κ°€κΈ° μ „ λ§ˆμ§€λ§‰ 자기 진단을 ν•  수 μžˆλŠ” Pass me assessmentsκ°€ μžˆμ—ˆλ‹€. 토이 문제 λ‚œμ΄λ„ 4κ°œλŠ” κ±°λœ¬ν•˜κ²Œ ν’€μ–΄μ•Ό ν•œλ‹€λŠ” 말을 λ“£κ³  사싀 살짝 κΈ΄μž₯을 ν•œ μƒνƒœμ˜€λŠ”λ° 문제λ₯Ό 보자마자 겁을 μ£Όλ €κ³  ν–ˆλ˜κ±°κ΅¬λ‚˜... λΌλŠ” 생각이 λ“€ μ •λ„λ‘œ 어렡지 μ•Šμ€ λ¬Έμ œλ“€μ΄μ˜€λ‹€.

ν΄λ‘œμ €μ— λŒ€ν•œ 이해 μž¬κ·€ν•¨μˆ˜λ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ”μ§€ λ°°μ—΄ λ©”μ„œλ“œλ₯Ό 잘 ν™œμš©ν•  수 μžˆλŠ”μ§€ κ·Έ 정도 ν™•μΈν•˜λŠ” ν…ŒμŠ€νŠΈλΌκ³  생각해도 쒋을거 κ°™λ‹€.

사싀 κ±±μ • 반 κΈ°λŒ€ λ°˜μ΄μ˜€λŠ”λ° μ’€ ν—ˆλ¬΄ν•œ 기뢄이 μ˜€λ‹€. λ§‰νž˜ 없이 λ¬Έμ œκ°€ ν’€λ €μ„œ λ‚΄κ°€ κ·Έλž˜λ„ 곡뢀λ₯Ό μ—΄μ‹¬νžˆ ν–ˆκ΅¬λ‚˜ λΌλŠ” 생각도 λ“€λ©΄μ„œ 쑰금 더 μ–΄λ €μš΄ λ‚œμ΄λ„μ˜€μœΌλ©΄ μ’‹κ² λ‹€λŠ” 생각도 λ“€κ³  μ’€ λ³΅ν•©μ μ΄μ˜€λ‹€. μ‹€μ§ˆμ μœΌλ‘œ 문제 ν’€μ΄λŠ” 30λΆ„ 정도 걸렸던거 κ°™λ‹€.

무튼 κ·Έλ ‡κ²Œ ν…ŒμŠ€νŠΈλ₯Ό μ’…λ£Œν•˜κ³  μ–΄μ œ ν•˜λ˜ μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜ 곡뢀λ₯Ό λ‹€μ‹œ ν–ˆκ³  λ¬Έμžμ—΄ μ²˜λ¦¬μ™€ 배열에 λŒ€ν•œ λ‚΄μš©μ— λŒ€ν•΄μ„œ λ³΅μŠ΅μ„ ν•˜λŠ”λ° μ—­μ‹œλ‚˜ μ •κ·œμ‹μ€ μ•ˆ μ“°λ©΄ κΉŒλ¨Ήλ”λΌ... λ‹€μ‹œ 볡슡이 ν•„μˆ˜μ μœΌλ‘œ ν•„μš”ν•œ 뢀뢄이닀.

그리고 읽기 쒋은 μ½”λ“œκ°€ 쒋은 μ½”λ“œλ‹€ 책이 λ„μ°©ν•΄μ„œ 쑰금 μ½μ–΄λ΄€λŠ”λ° λ‹Ήμ—°ν•˜κ²Œ μ•Œκ³  있던 λ‚΄μš©μ΄μ˜€μ§€λ§Œ 그러면 μ•ˆλ˜λŠ”κ±° μ•Œλ©΄μ„œ 잘λͺ» 된 μ½”λ“œ μž‘μ„±μ„ ν•˜κ³  있던 λ‚˜ μžμ‹ μ΄ ꡉμž₯히 λΆ€λ„λŸ½λ”λΌ.... 책을 μ½μœΌλ©΄μ„œ λΆ€λ„λŸ½κ³  ν˜Όλ‚˜λŠ” λŠλ‚Œμ€ μ²˜μŒμ΄μ˜€λ‹€. μ΄λ²ˆμ£Όμ— κΌ­ 완독을 ν•˜κ³  μ΄μ œλΆ€ν„°λŠ” μ’€ 더 μ–‘μ§ˆμ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ λ…Έλ ₯ν•΄λ³΄μž..!

λ¦¬μ•‘νŠΈλ„ ν•œλ‹¬ 정도 μ‰¬λ‹ˆκΉ λ‹€μ‹œ 또 리셋이 λ˜λŠ” λŠλ‚Œμ΄λΌ λ…Έλ§ˆλ“œ 코더 λ‹ˆκΌ΄λΌμŠ€κ°€ μ΄λ²ˆμ— μ“΄ 책을 κ΅¬λ§€ν•΄μ„œ κΈ°λ³Έ λ³΅μŠ΅μ„ μ­‰ 해보렀고 ν•œλ‹€.
λŒ€μΆ© λ‚΄μš©μ„ λ³΄λ‹ˆ μ–΄λ €μš΄ λ‚΄μš©μ€ λ‹Ήμ—°νžˆ μ—†μ–΄ λ³΄μ˜€κ³  κ·Έλƒ₯ μž¬λ°ŒλŠ” μ±… μ½λŠ”λ‹€ λΌλŠ” λŠλ‚ŒμœΌλ‘œ 읽어보면 쒋을 κ±° κ°™λ‹€.

이번 μ†”λ‘œ μœ„ν¬μ—μ„œ μ±™κΈΈ 건 λ§ˆμ§€λ§‰ νœ΄μ‹κ³Ό κΈ°λ³ΈκΈ° 볡슡, κΈ°λ³Έ μ†Œμ–‘ λ“± 이라고 μƒκ°ν•œλ‹€. μ•Œμ°¨κ²Œ μ‹œκ°„μ„ 써보자..!

μ†ŒμΈμˆ˜λΆ„ν•΄

const primeFactors = n => {
  let result = [];
  while (n % 2 === 0) {
    result.push(2);
    n /= 2;
  }
  for (let i = 3; i * i <= n; i += 2) {
    while (n % i === 0) {
      result.push(i);
      n /= i;
    }
  }
  if (n > 2) {
    result.push(n);
  }
  return result;
};

μœ„ μ½”λ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(sqrt(n))이닀. 첫번째 while λ¬Έμ—μ„œ 2둜 λ‚˜λˆ„μ–΄ 떨어지면 2λ₯Ό 배열에 μΆ”κ°€ν•˜κ³  n에 n을 2둜 λ‚˜λˆˆκ°’μ„ ν• λ‹Ήν•΄μ€€λ‹€. 그리고 forλ¬Έμ—μ„œ 3λΆ€ν„° 2μ”© μ¦κ°€ν•˜λ©° 제곱의 값이 n보닀 μž‘μ€ λ²”μœ„μ—μ„œ while문으둜 또 반볡 μž‘μ—…μ„ ν•΄μ€€λ‹€.
그리고 이 경우λ₯Ό λ‹€ ν†΅κ³Όν•œ 2보닀 큰 n을 배열에 μΆ”κ°€ν•΄μ€€λ‹€.

λͺ¨λ“ˆλŸ¬ κ±°λ“­ 제곱

const modularExponentiationUsingPow = (base, exponent, modulus) => {
  return Math.pow(base, exponent) % modulus;
};
console.log(modularExponentiationUsingPow(4, 3000, 5));   //NaN

base값을 exponent 만큼 μ œκ³±ν•œ 값을 modulus둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€ 값을 κ΅¬ν•˜λŠ” 식이닀.
ν•˜μ§€λ§Œ μœ„μ™€ 같이 Math.powλ₯Ό μ‚¬μš©ν•œ 계산 방법은 μ§€μˆ˜μ˜ 크기가 컀진닀면 값을 κ³„μ‚°ν•˜μ§€ λͺ»ν•œλ‹€.
λ”°λΌμ„œ μ•„λž˜μ™€ 같은 λ°©λ²•μœΌλ‘œ 변경을 ν•΄μ£Όμ–΄μ•Όν•œλ‹€.

const modularExponentiation = ({ base, exponent, modulus }) => {
  if (modulus === 1) return 0;
  let value = 1;
  for (let i = 0; i < exponent; i++) {
    value = (value * base) % modulus;
  }
  return value;
};
console.log(modularExponentiation({ base: 4, exponent: 3000, modulus: 5 })); // 1

μœ„ μ½”λ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n) 이닀. μ§€μˆ˜μ˜ 크기가 아무리 컀져도 연산이 κ°€λŠ₯ν•˜λ‹€.

n보닀 μž‘μ€ μ†Œμˆ˜ 좜λ ₯ν•˜κΈ°

const allPrimesLessThanN = n => {
  let result = [];
  for (let i = 0; i < n; i++) {
    if (isPrime(i)) {
      result.push(i);
    }
  }
  return result;
};

const isPrime = number => {
  if (number <= 1) return false;
  if (number <= 3) return true;
  if (number % 2 === 0 || number % 3 === 0) return false;
  for (let i = 5; i * i <= number; i += 6) {
    if (number % i === 0 || number % (i + 2) === 0) return false;
  }
  return true;
};

console.log(allPrimesLessThanN(29)); //[2, 3, 5, 7, 11, 13, 17, 19, 23]

isPrimeμ΄λΌλŠ” μ†Œμˆ˜λ₯Ό νŒλ³„ν•΄μ£ΌλŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜κ³  allPrimesLessThanN ν•¨μˆ˜μ—μ„œ λ°˜λ³΅λ¬Έμ„ ν†΅ν•˜μ—¬ 쑰건을 λ§Œμ‘±ν•˜λ©΄ 배열에 μΆ”κ°€ν•΄μ„œ λ°˜ν™˜ν•΄μ£Όλ„λ‘ μž‘μ„±μ„ ν•΄μ£Όμ—ˆλ‹€. μ‹œκ°„ λ³΅μž‘λ„λŠ” O(sqrt(n)) 이닀.

0개의 λŒ“κΈ€