😨 WeCode Codekata 3주차!

solmiiΒ·2020λ…„ 6μ›” 27일
0

Algorithm

λͺ©λ‘ 보기
3/3
post-thumbnail

3μ£Όμ°¨λŠ” νŒ€ν”„λ‘œμ νŠΈ 기간이닀!
ν•˜μ§€λ§Œ, μ½”λ“œμΉ΄νƒ€λŠ” λ©ˆμΆ”κΈ° μ•Šκ³  계속 ν•œλ‹€πŸ˜±
사싀, ν”„λ‘œμ νŠΈ κΈ°κ°„ μ „μ²˜λŸΌ 1μ‹œκ°„μ”© ν’€λ‘œ μŸκ³ μžˆμ§€λŠ” λͺ»ν•˜κ³  μžˆλ‹€....
κ·Έλž˜λ„ 맀일 2~30뢄씩은 ν‘ΈλŠ”μ€‘!!!


Day 1

Β Β  λ‚΄ 풀이 Β Β 

const complexNumberMultiply = (a, b) => {
  let aArr = a.split("+");
  let bArr = b.split("+");
  
  let aNum = aArr[0];
  let aCom = aArr[1].split("i")[0];
  let bNum = bArr[0];
  let bCom = bArr[1].split("i")[0];
  
  let aa = aNum * bCom;
  let aaa = aNum * bNum;
  let bb = bNum * aCom;
  let bbb = -(bCom * aCom);
  
  return `${aaa + bbb}+${aa + bb}i`
}

complexNumberMultiply('3+-1i', '99+99i'); // 396+198i

....? μ–΄μΌ€ ν’€μ—ˆλˆ„....?

일단 λ³΅μ†Œμˆ˜(complex number)κ°€ 문제둜 λ‚˜μ˜¬μ€„μ€ μ „ν˜€μ „ν˜€ λͺ°λžλ‹€......🀣

κ±°κΈ°μ„œ 1μ°¨ λ‹Ήν™©.... (근데 λ‚˜λ§Œ λ‹Ήν™©ν•œκ²Œ μ•„λ‹ˆμ—ˆλ‚˜λ³΄λ‹€.
λ‚΄κ°€ μ•„λŠ” λ³΅μ†Œμˆ˜λΌλŠ” κ°œλ…μ€ μ œκ³±ν•˜λ©΄ μŒμˆ˜μ—μ„œ λλ‚˜λŠ”λ°, μ½”λ“œμΉ΄νƒ€ νŒ€μ›λ“€μ΄ 그정도 μ•Œλ©΄ 탑티어라고 함ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

μ•„λ¬΄νŠΌ 일단 κ³„μ‚°μ‹λ§Œ μ•Œλ©΄ λ¬Έμ œν‘ΈλŠ”κ±΄ 어렡지 μ•Šλ‹€.
(λ‚˜μ²˜λŸΌ 일일이 λ‹€ μͺΌκ°œλ©΄ μ–΄λ–»κ²Œ 닡이 λ‚˜μ˜€κΈ΄ ν•œλ‹€.....γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹)


3+-1i , 99+99i λΌλŠ” inputμ—μ„œ + - i 같은 기호 λ‹€ λ–Όκ³  숫자만 놓고 보자! μ΄λ•Œ νŽΈμ˜μƒ μ™Όμͺ½ μˆ«μžλΆ€ν„° a, b, c, d 라고 λΆ€λ₯Έλ‹€.

a : 3 , b : 1 , c : 99 , d : 99

μ΄λ ‡κ²Œ!

μ—¬κΈ°κΉŒμ§€ μƒκ°ν•˜κ³  λ‚˜λ©΄ 정말 κ°„λ‹¨ν•˜λ‹€.

(a * c) + {-(b * d)} κ°€ μ•žμ˜ μ‹€μˆ˜, (a * d) + (b * c) κ°€ λ’€μ˜ ν—ˆμˆ˜ 이닀.

b * d 에 - λ₯Ό 뢙인 μ΄μœ λŠ” b 와 d λͺ¨λ‘ ν—ˆμˆ˜μ΄κΈ° λ•Œλ¬Έμ— i^2 이 λ˜μ„œ μŒμˆ˜κ°€ 되기 λ•Œλ¬Έ!

λ‹€μ‹œ 문제둜 λŒμ•„κ°€μ„œ, split 으둜 + 와 i λ₯Ό κΈ°μ€€μœΌλ‘œ λͺ¨λ‘ μͺΌκ°œμ„œ 숫자만 남겼고,

μ•žμ—μ„œ 말 ν•œ λŒ€λ‘œ κ³±ν•œ 수λ₯Ό 각각 aa , aaa , bb , bbb λΌλŠ” λ³€μˆ˜μ— 담아놨닀.
(λ³€μˆ˜λͺ… 싀화냐...?)

μ²˜μŒμ— λ³΅μ†Œμˆ˜μ— λ‹Ήν™©ν•΄μ„œ 그렇지, 이건 λ³΅μ†Œμˆ˜κ°€ μ•„λ‹ˆλ‹€... 이건 κ·Έλƒ₯ λ”ν•˜κΈ° κ³±ν•˜κΈ°λ‹€...ν•˜κ³  μ΅œλ©΄μ„ κ±Έλ©΄

어렡지 μ•Šκ²Œ ν’€ 수 μžˆλŠ” 문제인 것 κ°™λ‹€! (μ†Œμš”μ‹œκ°„ 4~50λΆ„! λ‚˜μ˜μ§€ μ•Šλ‹€!!)

Β Β  model solution Β Β 

const complexNumberMultiply = (a, b) => {
  let firstArr = a.substring(0, a.length-1).split('+');
  const a1 = Number(firstArr[0])
  const a2 = Number(firstArr[1])

  let secondArr = b.substring(0, b.length-1).split('+');
  const b1 = Number(secondArr[0])
  const b2 = Number(secondArr[1])

  return `${a1 * b1 - a2 * b2}+${a1 * b2 + a2 * b1}i`
}

λ‚΄ ν’€μ΄λž‘ 거의 λΉ„μŠ·ν•œλ° λͺ¨λΈ μ†”λ£¨μ…˜μ€ 각 μˆ«μžλ§ˆλ‹€ μͺΌκ° λ’€μ— λ°”λ‘œ κ³±ν–ˆλ„€!

ν•˜κΈ΄...μƒκ°ν•΄λ³΄λ‹ˆ aa aaa bb bbb 같은 λ³€μˆ˜λͺ… λ§Œλ“€μ–΄λ΄€μž 이 ν•¨μˆ˜ μ•ˆμ—μ„œ ν•œλ²ˆ μ“°κ³  말건데 μ’€ λ‚­λΉ„μ˜€λ˜κ²ƒ κ°™λ‹€γ… γ… γ… γ… 


Day 2

Β Β  λ‚΄ 풀이 Β Β 

const reverseString = s => {
  return s.reverse();
};

reverseString(["h","e","l","l","o"]); // ["o","l","l","e","h"]

? ν”„λ‘œμ νŠΈμ— μ§‘μ€‘ν•˜λΌλŠ” λ©˜ν† λ‹˜λ“€μ˜ λ°°λ €...?


Day 3

Β Β  λ‚΄ 풀이 Β Β 

거의 λ‹€ ν’€μ—ˆλŠ”λ°.....index의 λ§ˆμ§€λ§‰μ— λΆ€λ”«νžˆλ©΄ errorκ°€ λ‚œλ‹€πŸ˜­ 해결쀑!!!!

Day 4

Β Β  λ‚΄ 풀이 Β Β 

ν‘ΈλŠ”μ€‘....

Day 5

Β Β  λ‚΄ 풀이 Β Β 

const factorial = n => {
  if (n <= 1) return 1;
  let result = 1;
  for (let i = 1; i < n; i++) {
    result *= i + 1;
  }
  return result;
}

factorial(10); //3628800

일단, μž¬κ·€ν•¨μˆ˜ 문제긴 ν–ˆμ§€λ§Œ 이 λ¬Έμ œλŠ” λ”±νžˆ μž¬κ·€ν•¨μˆ˜λ₯Ό 쓰지 μ•Šμ•„λ„ ν’€ 수 μžˆμ—ˆλ‹Ή....

μž¬κ·€ν•¨μˆ˜μ— λŒ€ν•œκ±΄ ν”„λ‘œμ νŠΈκ°€ λλ‚œ 주말에 μ’€ 더 μ •λ¦¬ν•΄λ³΄κΈ°λ‘œ ν•˜κ³ !!!

νŒ©ν† λ¦¬μ–Όμ„ κ΅¬ν•˜λŠ” 문제인데, νŒ©ν† λ¦¬μ–Ό μ΄λΌλŠ” 말을 λ“£κ³  쀑학생 고등학생 μˆ˜ν•™μ‹œκ°„μœΌλ‘œ 거슬러 μ˜¬λΌκ°€λ©΄μ„œ λ©˜λΆ•μ„....ν•  ν•„μš”λŠ” μ „ν˜€ μ—†κ³ ,

λ‹¨μˆœνžˆ 3! = 1 * 2 * 3, 5! = 1 * 2 * 3 * 4 * 5 이당.

일단 1λΆ€ν„° μ‹œμž‘ν•΄μ•Ό ν•˜λ‹ˆκΉŒ result λΌλŠ” λ³€μˆ˜μ— 1μ΄λΌλŠ” 값을 ν• λ‹Ήν•˜κ³ , for 문을 λŒλ¦°λ‹€.

인자둜 μ£Όμ–΄μ§€λŠ” n의 각 μš”μ†Œλ“€μ„ λŒλ©΄μ„œ, 거기에 1μ”© λ”ν•œ 값을 result 에 λ”ν•œλ‹€.

λ§Œμ•½ n이 1보닀 μž‘κ±°λ‚˜ κ°™λ‹€λ©΄, 1 을 return ν•œλ‹€.

Β Β  model solution Β Β 

const factorial = n => {
  if (n === 0) return 1;
  
  return n * factorial(n-1);
}

μž¬κ·€ ν•¨μˆ˜λž€, ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄μ„œ κ·Έ μ•ˆμ—μ„œ λ™μ‹œμ— ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•˜λŠ”λ°,

이에 λŒ€ν•΄ 크게 μ•ˆμ™€λ‹Ώλ‹€ λ³΄λ‹ˆ, for 문을 μ΄μš©ν•΄μ„œ ν’€μ—ˆλ˜κ²ƒ κ°™λ‹€.

μš°μ„ , n === 0μΌλ•Œ, μž¬κ·€λ₯Ό λ©ˆμΆ”κ³  1 을 λ°˜ν™˜ν•˜λŠ” 쑰건을 λ¨Όμ € κ±Έμ–΄μ€€λ‹€.

그리고 n와 factorial(n-1) 을 κ³±ν•΄μ€€λ‹€. 이 λ•Œ, μ •μ˜κ°€ λλ‚˜μ§€λ„ μ•Šμ€ factorial κ°€ μ‚¬μš©λ˜μ—ˆλ‹€.

그럼 factorial(n-1) 의 값은 μ–΄λ–»κ²Œ μ•Œ 수 μžˆμ„κΉŒ?

λ‹€μ‹œ ν•¨μˆ˜μ˜ 처음으둜 λŒμ•„κ°€μ„œ, μ΄λ²ˆμ—” factorial(n-1) 으둜 연산을 ν•œλ‹€.

λ§ˆμ§€λ§‰μ— return n * factorial(n-1); 을 λ§Œλ‚˜λ©΄, 처음의 n 을 κΈ°μ€€μœΌλ‘œ μƒκ°ν–ˆμ„ λ•Œ 사싀은 return (n-1) * factorial(n-2); κ°€ 될것이닀.

factorial(n-2) 의 값을 κ΅¬ν•˜κΈ° μœ„ν•΄ λ‹€μ‹œ 처음으둜 λŒμ•„κ°„λ‹€.

μ–Έμ œ μ’…λ£Œν•  것인가에 λŒ€ν•œ 쑰건이 μ—†λ‹€λ©΄, λ¬΄ν•œμœΌλ‘œ λ°˜λ³΅ν•˜κ² μ§€λ§Œ μš°λ¦¬λŠ” n이 0일 κ²½μš°μ— 1을 λ°˜ν™˜ν•œλ‹€λŠ” 쑰건을 κ±Έμ—ˆκΈ° λ•Œλ¬Έμ— μ­‰μ­‰μ­‰ λ‚΄λ €κ°€λ‹€κ°€.... n이 0이 λ˜λŠ” μˆœκ°„! λ“œλ””μ–΄ 이 ν•¨μˆ˜κ°€ μ’…λ£Œλ˜κ³  κ·Έλ™μ•ˆμ˜ 결과값이 λ°˜ν™˜λœλ‹€.

10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 말이닀!

(μ—¬κΈ°μ„œ 1은, λ§ˆμ§€λ§‰μ˜ return n * factorial(n-1); 은 사싀, return 1 * factorial(0); 으둜 값이 0이기 λ•Œλ¬Έμ— n === 0 μ΄λΌλŠ” λ§ˆμ§€λ§‰ μ‘°κ±΄μ—μ„œ 1을 return ν•¨μœΌλ‘œμ¨ 값을 λ§žμΆ°μ€€κ²ƒ!


3μ£Όμ°¨ ν›„κΈ° : 머리가 점점 λ§λž‘λ§λž‘ν•΄μ§€λŠ” λŠλ‚Œμ΄κΈ΄ ν•œλ°, νŒ€ν”Œμ΄λž‘ 병행은 μ†”μ§νžˆ 무리데쓰...😭😭😭😭

profile
ν•˜λ£¨ν•˜λ£¨λŠ” μ„±μ‹€ν•˜κ²Œ 인생 μ „μ²΄λŠ” λ˜λŠ”λŒ€λ‘œ

0개의 λŒ“κΈ€