[TIL] 211019

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

TIL

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

πŸ“ 였늘 ν•œ 것

  1. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 문제 풀이 - λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ°”κΎΈκΈ° / 2016 / μ•½μˆ˜μ˜ ν•© / λ¬Έμžμ—΄ 닀루기 κΈ°λ³Έ / 같은 μˆ«μžλŠ” μ‹«μ–΄ / λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 숫자 λ°°μ—΄

  2. Number.isInteger() / Number()와 parseInt() 비ꡐ


πŸ“š 배운 것

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

1) Level 1 문제 풀이

(1) λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ°”κΎΈκΈ°

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

  • μ²˜μŒμ— +둜 μ‹œμž‘ν•˜λ©΄ 숫자둜 바꿔도 +κ°€ λ‚˜μ™€μ•Ό ν•˜λŠ” 쀄 μ•Œμ•˜λ‹€. 이러면 μ• μ΄ˆμ— 리턴 값이 숫자일 μˆ˜κ°€ μ—†λŠ”λ°.
function solution(s) {
  return s.startsWith('+') ? `+${parseInt(s)}` : parseInt(s);
}

πŸ”Ž μˆ˜μ •ν•œ 풀이

function solution(s) {
  return parseInt(s);
}

(2) 2016λ…„

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

function solution(a, b) {
  const day = new Date(2016, a-1, b).getDay();

  switch (day) {
    case 0:
      return 'SUN';
    case 1:
      return 'MON';
    case 2:
      return 'TUE';
    case 3:
      return 'WED';
    case 4:
      return 'THU';
    case 5:
      return 'FRI';
    case 6:
      return 'SAT';
  }
}

(3) μ•½μˆ˜μ˜ ν•©

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

  • μ›λž˜λŠ” for 루프λ₯Ό 거쳐 μ•Œμ•„λ‚Έ μ•½μˆ˜λ“€μ„ λ³„λ„μ˜ 배열에 λ°›μ•„μ„œ κ·Έ μš”μ†Œλ“€μ„ reduce ν•¨μˆ˜λ‘œ λͺ¨λ‘ 더해주렀고 ν–ˆλ‹€.

  • κ·ΈλŸ¬λ‚˜, μ²˜μŒλΆ€ν„° 합계λ₯Ό μ˜λ―Έν•˜λŠ” λ³€μˆ˜λ₯Ό μ§€μ •ν•œ ν›„ for 루프λ₯Ό 거쳐 μ•Œμ•„λ‚Έ μ•½μˆ˜λ“€μ„ λ°”λ‘œ 이전 합계에 λ”ν•΄μ£ΌλŠ” μ‹μœΌλ‘œ λ°”κΏ¨λ‹€.

function solution(n) {
  let sum = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      sum = sum + i;
    }
  }
  return sum;
}

(4) λ¬Έμžμ—΄ 닀루기 κΈ°λ³Έ

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

  • μ •ν™•μ„± ν…ŒμŠ€νŠΈμ—μ„œ μΌ€μ΄μŠ€ ν•˜λ‚˜λ₯Ό 톡과 λͺ»ν•¨
function solution(s) {
  const convertToNumber = Number(s);

  if (isNaN(convertToNumber)) {
    return false;
  } else {
    if (s.length === 4 || s.length === 6) {
      return true;
    } else {
      return false;
    }
  }
}

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

  • μ†Œμˆ˜μ  μžλ¦¬κ°€ μžˆλŠ” 숫자λ₯Ό κ³ λ € μ•ˆ ν–ˆλ‹€. if (Number.isInteger(num))λ₯Ό μΆ”κ°€ν–ˆλ‹€.

  • μ—¬μ „νžˆ ν•˜λ‚˜κ°€ 톡과가 μ•ˆλœλ‹€.

function solution(s) {
  if (s.length === 4 || s.length === 6) {
    const num = Number(s);
    if (isNaN(num)) {
      return false;
    } else {
      if (Number.isInteger(num)) {
        return true;
      } else {
        return false;
      }
    }
  } else {
    return false;
  }
}

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

  • 주어진 λ¬Έμžμ—΄μ΄ '100.'이어도 trueκ°€ λ‚˜μ˜€λŠ” λ¬Έμ œκ°€ μžˆλ‹€. Number(100.)은 100이 λœλ‹€. if (!s.includes('.'))λ₯Ό μΆ”κ°€ν–ˆλ‹€.

  • 이걸 고쳐도 μ—¬μ „νžˆ ν•˜λ‚˜κ°€ 톡과가 μ•ˆ λœλ‹€...

function solution(s) {
  if (s.length === 4 || s.length === 6) {
    if (!s.includes('.')) {
      const num = Number(s);

      if (Number.isInteger(num)) {
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }

  } else {
    return false;
  }
}

πŸ”Ž λ„€ 번째 μž‘μ„±ν•œ 풀이 (μ΅œμ’…πŸŽ‰)

  • μ†Œμˆ˜μ (.)만이 λ¬Έμ œκ°€ μ•„λ‹ˆμ—ˆλ‹€. 문자둜 ν‘œν˜„λœ 숫자(16μ§„μˆ˜ λ“±)에 Number()λ₯Ό μ‚¬μš©ν•΄λ„ NaN이 λœ¨μ§€ μ•Šκ³  숫자둜 문제 없이 λ³€ν™˜μ΄ 됐닀.

  • μ²˜μŒλΆ€ν„° λ‹€μ‹œ μž‘μ„±ν–ˆλ‹€. for 루프λ₯Ό 돌렀 s λ¬Έμžμ—΄μ˜ 문자 ν•˜λ‚˜ν•˜λ‚˜λ₯Ό Number()λ₯Ό μ΄μš©ν•΄ 숫자둜 λ°”κΎΌ ν›„ '이것이 μ •μˆ˜μΈμ§€ 확인'ν•˜λŠ” 방법을 썼닀. if (Number.isInteger(num))

  • λ“œλ””μ–΄ 100점이닀.

function solution(s) {
  let numCount = 0;

  if (s.length === 4 || s.length === 6) {
    for (let i = 0; i < s.length; i++) {
      const num = Number(s[i]);
      if (Number.isInteger(num)) {
        numCount++;
      }
    }

    if (numCount === 4 || numCount === 6) {
      return true;
    } else {
      return false;
    }
  } else {
    return false;
  }
}

πŸ”₯ μ΄λ•Œ, λ¬ΈμžμΈμ§€ μˆ«μžμΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ if (typeof num === 'number')라고 μ“Έ 수 μ—†λ‹€. λ¬Έμžμ— Number()λ₯Ό μ‚¬μš©ν•΄ κ·Έ 값이 NaN이 λ‚˜μ˜€λ”λΌλ„ typeof 값은 무쑰건 numberκ°€ 뜨기 λ•Œλ¬Έμ΄λ‹€.

πŸ’‘ Number(λ¬Έμžμ—΄) vs parseInt(λ¬Έμžμ—΄)

πŸ”Ž Number(λ¬Έμžμ—΄)

  • λ¬Έμžμ—΄μ— λ¬Έμžκ°€ ν¬ν•¨λ˜μ–΄ 있으면, κ·Έ 값은 NaN이 λ‚˜μ˜¨λ‹€

    단, λ¬Έμžμ—΄μ΄ 문자둜 ν‘œν˜„λœ 숫자라면, κ·Έ 값은 μˆ«μžκ°€ λ‚˜μ˜¨λ‹€

  • ν•œνŽΈ, typeofλ₯Ό μ‚¬μš©ν•˜λ©΄ 무쑰건 'number'둜 λ‚˜μ˜¨λ‹€

πŸ”Ž parseInt(λ¬Έμžμ—΄)

  • λ¬Έμžμ—΄μ— λ¬Έμžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄λ„, parseInt()λŠ” 숫자만 인식해 이λ₯Ό κ·ΈλŒ€λ‘œ κ°’μœΌλ‘œ λ³€ν™˜ν•œλ‹€ (μ •μˆ˜λ‘œ λ³€ν™˜)

    단, λ¬Έμžμ—΄μ΄ 문자둜 μ‹œμž‘ν•˜λ©΄, NaN을 λ³€ν™˜ν•œλ‹€. λ˜ν•œ, λ¬Έμžμ—΄μ΄ 문자둜 ν‘œν˜„λœ 숫자라면, parseInt()λŠ” ꡬ문 뢄석을 거친 숫자(μ •μˆ˜)λ₯Ό κ°’μœΌλ‘œ λ³€ν™˜ν•œλ‹€.

  • ν•œνŽΈ, typeofλ₯Ό μ‚¬μš©ν•˜λ©΄ 무쑰건 'number'둜 λ‚˜μ˜¨λ‹€
// πŸ”Ž Number(λ¬Έμžμ—΄)
console.log(Number('a123')); // NaN
console.log(typeof Number('a123')); // number

console.log(Number('0x11')); // 17 (0x11은 16μ§„μˆ˜λ‘œ ν‘œν˜„λœ 17을 μ˜λ―Έν•œλ‹€)
console.log(typeof Number('0x11')); // number

// πŸ”Ž parseInt(λ¬Έμžμ—΄)
console.log(parseInt('1a23')); // 1
console.log(typeof parseInt('1a23')); // number

console.log(parseInt('a123')); // NaN
console.log(typeof parseInt('a123')); // number

console.log(parseInt('0x11')); // 17 (0x11은 16μ§„μˆ˜λ‘œ ν‘œν˜„λœ 17을 μ˜λ―Έν•œλ‹€)
console.log(typeof parseInt('0x11')); // number

(5) 같은 μˆ«μžλŠ” μ‹«μ–΄

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

  • ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ΄μš©ν•΄ μž‘μ„±ν–ˆλ‹€. μ€‘λ³΅λ˜λŠ” λͺ¨λ“  μˆ«μžκ°€ arrμ—μ„œ μ‚­μ œλ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.
function solution(arr) {
  const checkedValue = [];

  for (let i = 0; i < arr.length; i++) {
    if (checkedValue[arr[i]] === undefined) {
      checkedValue[arr[i]] = 1;
    } else {
      arr.splice(i, 1);
      i = i - 1;
    }
  }

  return arr.flat();
}

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

  • 정확도 ν…ŒμŠ€νŠΈλŠ” λͺ¨λ‘ ν†΅κ³Όν–ˆμ§€λ§Œ νš¨μœ¨μ„± ν…ŒμŠ€νŠΈμ—μ„œ μ „λΆ€ μ‹œκ°„ 초과둜 0점을 λ§žμ•˜λ‹€
function solution(arr) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === arr[i-1]) {
      arr.splice(i, 1);
      i = i - 1;
    }
  }

  return arr;
}

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

  • λ‚˜λ¦„λŒ€λ‘œ λ‘œμ§μ„ μƒκ°ν•΄μ„œ μž‘μ„±ν•΄λ΄€μ§€λ§Œ 일뢀 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆλ‹€. μ–΄λ””κ°€ 잘λͺ»λλŠ”지 찾아봐야 ν•œλ‹€.
function solution(arr) {
  const answer = [];

  let loop = 0;

  for (let i = 0; i < arr.length; i = i + loop + 1) {
    if (arr[i] === arr[i + 1]) {
      let startIndex = i;
      while (arr[startIndex] === arr[startIndex + 1]) {
        startIndex = startIndex + 1;
        loop++;
      }
      answer.push(arr[startIndex]);
    } else {
      answer.push(arr[i]);
    }
  }

  return answer;
}

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

  • for 루프 밖에 μ„ μ–Έν•œ loop λ³€μˆ˜κ°€ for λ£¨ν”„μ—μ„œ iκ°€ ν•œ 번 μˆœνšŒν•œ 후에도 μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œμ—¬μ„œ μ›ν•˜λŠ” λŒ€λ‘œ 값이 λ‚˜μ˜€μ§€ μ•Šμ€ κ²ƒμ΄μ—ˆλ‹€.

  • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ iκ°€ ν•œ 번 μˆœνšŒν•œ 후에 i = i + loop + 1을 톡해 i의 값을 λ°”κΎΌ ν›„, loopλ₯Ό 0으둜 μ΄ˆκΈ°ν™”ν•˜λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν–ˆλ‹€.

  • 100점. νš¨μœ¨μ„± ν…ŒμŠ€νŠΈκΉŒμ§€ ν†΅κ³Όν–ˆλ‹€.

function solution(arr) {
  const answer = [];

  let loop = 0;

  for (let i = 0; i < arr.length; i = i + loop + 1) {
    loop = 0; // 이 λΆ€λΆ„λ§Œ μΆ”κ°€!

    if (arr[i] === arr[i + 1]) {
      let startIndex = i;
      while (arr[startIndex] === arr[startIndex + 1]) {
        startIndex = startIndex + 1;
        loop++;
      }
      answer.push(arr[startIndex]);
    } else {
      answer.push(arr[i]);
    }
  }

  return answer;
}

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

  • filter() ν™œμš©

    λ‚˜λŠ” μ—°μ†λœ 숫자 쀑 처음 μˆ«μžλ“€λ§Œ 뽑아 μƒˆλ‘œμš΄ 배열을 λ§Œλ“€μ–΄ λ¦¬ν„΄ν–ˆλŠ”λ°, 이 ν’€μ΄μ—μ„œλŠ” 이전 μˆ«μžμ™€ λ‹€λ₯Έ μˆ«μžκ°€ λ‚˜μ˜€λ©΄ κ·Έ 숫자만 골라 λ¦¬ν„΄ν–ˆλ‹€. 풀이 μ‹œκ°„μ€ λ‚΄κ°€ 절반 정도 덜 걸리긴 ν•˜λŠ”λ° λ‚΄κ°€ 쓸데없이 생각을 λ³΅μž‘ν•˜κ²Œ ν•œ 걸까.

function solution(arr) {
  return arr.filter((item, index) => item !== arr[index + 1]);
}

(6) λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 숫자 λ°°μ—΄

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

function solution(arr, divisor) {
  const newArr = arr.filter(x => x % divisor === 0).sort((a, b) => a - b);
  return newArr.length === 0 ? [-1] : newArr;
}

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

  • λ§ˆμ§€λ§‰μ— newArr.lengthκ°€ 0이 μ•„λ‹Œ κ²½μš°μ—λ§Œ sort() λ©”μ„œλ“œλ₯Ό μ μš©ν•˜λ„λ‘ ν•˜μ—¬ λΆˆν•„μš”ν•œ 연산을 ν•˜μ§€ μ•Šλ„λ‘ ν•΄μ£Όμ—ˆλ‹€.
function solution(arr, divisor) {
  const newArr = arr.filter(x => x % divisor === 0);
  return newArr.length === 0 ? [-1] : newArr.sort((a, b) => a - b);
}

✨ 내일 ν•  것

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

  2. μ±… 'λˆ„κ΅¬λ‚˜ 자료 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜' μ΄μ–΄μ„œ 읽기

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

0개의 λŒ“κΈ€