🟣 였늘의 문제 회고

κΉ€νƒœμš±Β·2023λ…„ 3μ›” 20일
0
post-thumbnail

😲 였늘의 문제 ν•₯짝 #1


[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1: λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ°”κΎΈκΈ°

문제 μ„€λͺ…
λ¬Έμžμ—΄ sλ₯Ό 숫자둜 λ³€ν™˜ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•˜μ„Έμš”.

μ œν•œμ‚¬ν•­
s의 κΈΈμ΄λŠ” 1 이상 5μ΄ν•˜μž…λ‹ˆλ‹€.
s의 λ§¨μ•žμ—λŠ” λΆ€ν˜Έ(+, -)κ°€ 올 수 μžˆμŠ΅λ‹ˆλ‹€.
sλŠ” λΆ€ν˜Έμ™€ 숫자둜만 μ΄λ£¨μ–΄μ ΈμžˆμŠ΅λ‹ˆλ‹€.
sλŠ” "0"으둜 μ‹œμž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

sreturn
"1234"1234
"-1234"-1234

λ‚˜μ˜ 풀이

function solution(s) {
  var answer = parseInt(s);
  return answer;
}

μ ‘κ·Ό 방법
1. solution 인자 s에 λ¬Έμžμ—΄μ„ 숫자둜 return ν•΄μ•Ό 함.
2. '1234' => 1234 parseInt( ) λ©”μ†Œλ“œλ₯Ό 적용


λ‹€λ₯Έ μ‚¬λžŒ 풀이

function strToInt(str){
  return str/1
  }

μœ„μ™€ 같이 λ¬Έμžμ—΄μ— μ—°μ‚°μžλ₯Ό μ μš©ν•˜μ—¬ μžλ™ ν˜• λ³€ν™˜μ„ μΌμœΌν‚¬ 수 μžˆλŠ” 방법도 μžˆμ—ˆλ‹€.



😲 였늘의 문제 ν•₯짝 #2


[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1: ν•˜μƒ€λ“œ 수

문제 μ„€λͺ…
μ–‘μ˜ μ •μˆ˜ xκ°€ ν•˜μƒ€λ“œ 수이렀면 x의 자릿수의 ν•©μœΌλ‘œ xκ°€ λ‚˜λˆ„μ–΄μ Έμ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 18의 자릿수 합은 1+8=9이고, 18은 9둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ―€λ‘œ 18은 ν•˜μƒ€λ“œ μˆ˜μž…λ‹ˆλ‹€. μžμ—°μˆ˜ xλ₯Ό μž…λ ₯λ°›μ•„ xκ°€ ν•˜μƒ€λ“œ μˆ˜μΈμ§€ μ•„λ‹Œμ§€ κ²€μ‚¬ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

xλŠ” 1 이상, 10000 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

arrreturn
10ture
12ture
11false
13false

λ‚˜μ˜ 풀이

function solution(x) {
  var answer = (x + "").split("").reduce((a, c) => a + parseInt(c), 0);

  return x % answer !== 0 ? false : true;
}

μ ‘κ·Ό 방법
1. μžμ—°μˆ˜ xλ₯Ό κ°œλ³„λ‘œ λ‚˜λ‰˜μ–΄ 합을 ν•΄μ£Όμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— λ¬Έμžμ—΄λ‘œ ν˜• λ³€ν™˜.
2. reduce ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ ν˜„μž¬μ˜ 값을 숫자둜 ν˜• λ³€ν™˜ν•˜κ³  λˆ„μ‚°ν•˜μ—¬ 값을 λ°˜ν™˜.
3. ?쑰건뢀 μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ x % answer 비ꡐ ν›„ true, false λ°˜ν™˜.


문제점
1. reduce ν•¨μˆ˜μ— μ΄ˆκΈ°κ°’ 섀정을 해주지 μ•Šμ•„μ„œ ν˜„μž¬ 값을 ν˜• λ³€ν™˜μ„ ν•˜μ—¬λ„ μˆ«μžν˜• 값이 λˆ„μ‚°λ˜μ§€ μ•Šκ³  λ¬Έμžμ—΄ 값이 λ³‘ν•©λ˜μ–΄ λ‚˜μ™”μ—ˆλ˜ λ¬Έμ œκ°€ μžˆμ—ˆμŒ.

x = 12

var answer = (x + "").split("").reduce((acc, cur) => a + parseInt(cur));
// 12κ°€ λ‚˜μ˜€κ²Œ 됨. 
초기 값이  μ„€μ •λ˜μ§€ μ•Šμ•„ 첫 번째 μš”μ†ŒμΈ "1"κ³Ό 숫자 2κ°€ λ”ν•΄μ Έμ„œ λ³‘ν•©λœ 12κ°€ λ‚˜μ˜΄.

var answer = (x + "").split("").reduce((acc, cur) => a + parseInt(cur), 0);
// 3이 λˆ„μ‚°λ˜μ–΄ λ‚˜μ˜΄
초기 κ°’ 0λΆ€ν„° μ‹œμž‘ν–ˆκΈ°μ— 1κ³Ό 2κ°€ ν˜• λ³€ν™˜λ˜μ–΄μ„œ 3이 λ‚˜μ˜€κ²Œ 됨.
  1. ? 쑰건뢀 μ—°μ‚°μžλŠ” μ—°μ‚°μžμ΄λ―€λ‘œ ν‘œν˜„μ‹μœΌλ‘œ μž‘μ„±ν•΄μ•Όν•¨.
    ν•„μžλŠ” μ—¬κΈ°μ„œ ifλ¬Έ 처럼 또 ν•˜λ‚˜μ˜ 문으둜 μ“°λ €κ³  ν–ˆμ—ˆμ–΄μ„œ λ¬Έμ œκ°€ 됨.

if(x % answer !== 0) ? false : true;

//  truthy ν•˜λ©΄ falseκ°€ falsyλ©΄ trueκ°€ λ‚˜μ™€μ•Ό ν•˜λŠ”λ° λ‹€λ₯Έ 값이 λ‚˜μ˜΄.

λ‹€λ₯Έ μ‚¬λžŒ 풀이

function solution(x) {
    let num = x;
    let sum = 0;
    do {
        sum += x%10;
        x = Math.floor(x/10);
    } while (x>0);

    return !(num%sum);
}

이전에 μžμ—°μˆ˜ λ’€μ§‘μ–΄μ„œ λ°°μ—΄λ‘œ λ§Œλ“œλŠ” λ¬Έμ œμ—μ„œμ™€ μœ μ‚¬ν•œ λ°©λ²•μœΌλ‘œ

μ§€κΈˆμ˜ 풀이 μ—­μ‹œ ν˜• λ³€ν™˜ 없이 μˆ«μžν˜•μœΌλ‘œλ§Œ 문제λ₯Ό ν’€μ–΄ ν•΄κ²°ν•œ 풀이이닀.
훨씬 속도가 빨리 λ‚˜μ˜¨λ‹€κ³  ν•œλ‹€!



😲 였늘의 문제 ν•₯짝 #3


[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1: 두 μ •μˆ˜ μ‚¬μ΄μ˜ ν•©

문제 μ„€λͺ…
두 μ •μˆ˜ a, bκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ a와 b 사이에 μ†ν•œ λͺ¨λ“  μ •μˆ˜μ˜ 합을 λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•˜μ„Έμš”.
예λ₯Ό λ“€μ–΄ a = 3, b = 5인 경우, 3 + 4 + 5 = 12μ΄λ―€λ‘œ 12λ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.

μ œν•œμ‚¬ν•­
a와 bκ°€ 같은 κ²½μš°λŠ” λ‘˜ 쀑 아무 μˆ˜λ‚˜ λ¦¬ν„΄ν•˜μ„Έμš”.
a와 bλŠ” -10,000,000 이상 10,000,000 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.
a와 b의 λŒ€μ†Œκ΄€κ³„λŠ” μ •ν•΄μ Έμžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

abreturn
3512
333
5312

μ •λ‹΅ 풀이

function solution(a, b) {
  var answer = 0;
  var min = Math.min(a, b);
  var max = Math.max(a, b);
  for (var i = min; i <= max; i++) {
    answer += i;
  }
  return answer;
}

λ‚˜μ˜ 풀이

function solution(a, b) {
  var answer = a > b ? a - 1 : a + 1;
  if (a === b) answer = a;
  else answer = answer + (a + b);

  return answer;
}


μ ‘κ·Ό 방법
1. a와 b의 크기λ₯Ό λΉ„κ΅ν•˜μ—¬ aκ°€ b보닀 크면:-1 μž‘μœΌλ©΄:+1
2. a와 b의 크기가 κ°™μœΌλ©΄ λ‘˜ 쀑 아무 κ°’ λ°˜ν™˜
3. answer와 μΈμžλ“€μ„ 더해주어 λ°˜ν™˜.


문제 점
ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν†΅κ³Όν–ˆμ§€λ§Œ μ΅œμ’… μ œμΆœμ—μ„œ μ‹€νŒ¨κ°€ 났닀.

주어진 예제의 μ‹λ§Œ 풀이할 수 μžˆμ§€, κ·Έ μ΄μƒμ˜ μΈμžκ°€ 주어지면 μ œλŒ€λ‘œλœ ν•¨μˆ˜κ°€ μž‘λ™λ˜μ§€ μ•ŠμŒ.

ex) solution(3,6) 이 주어지면
// 18이 λ‚˜μ™€μ•Ό ν•˜λŠ”λ° 13이 λ‚˜μ˜΄.

κ²°κ΅­ λ§‰ν˜€μ„œ λ‹€λ₯Έ μ΄λ“€μ˜ 풀이λ₯Ό μ°Έκ³ ν–ˆλ‹€.



λ‹€λ₯Έ μ‚¬λžŒ 풀이

#1

function adder(a, b){
    var result = 0
    
    return (a+b) * (Math.abs(a-b)+1) / 2;
}

풀이
1. Math.abs( ) λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ ˆλŒ€ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό κ΅¬ν˜„.
2. return에 ()의 μ΅œμ’…κ°’μ—μ„œ /2λ₯Ό ν•˜μ—¬ μ‚¬μ΄μ˜ κ°’κΉŒμ§€ λ”ν•œ 값을 ꡬ함.

#2

function solution(a, b) {
  var answer = 0;
  var min = Math.min(a, b);
  var max = Math.max(a, b);
  for (var i = min; i <= max; i++) {
    answer += i;
  }
  return answer;
}

풀이
1. Math.minκ³Ό Math.maxλ₯Ό 톡해 인자(a,b)μ‚¬μ΄μ˜ μ΅œμ†Œ κ°’κ³Ό μ΅œλŒ€ 값을 ꡬ함.
2. for 반볡으둜 μ§€μ—­λ³€μˆ˜ iλ₯Ό minκ°’ ν• λ‹Ήν•˜κ³  max값이 λ λ•ŒκΉŒμ§€ 반볡.
3. μ‚¬μ΄μ˜ 값을 += ν• λ‹Ήν•˜λ©° μ‚¬μ΄μ˜ κ°’κΉŒμ§€ λ”ν•΄μ€Œ.

μœ„ μ½”λ“œλ₯Ό κ°œμ„ ν•΄λ³΄λ©΄ μ΄λ ‡κ²Œλ„ ν•  수 μžˆκ² λ‹€ μ‹Άμ–΄μ„œ κ°€μ Έμ˜€κ²Œ 됐닀.

function adder(a, b, s = 0){
  for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
  return s;
}
profile
방법을 연ꡬ할 쀄 μ•„λŠ” 개발자!

0개의 λŒ“κΈ€