🟣 였늘의 문제 회고

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

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


[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv1: 콜라츠 μΆ”μΈ‘

문제 μ„€λͺ…
1937λ…„ Collatzλž€ μ‚¬λžŒμ— μ˜ν•΄ 제기된 이 좔츑은, 주어진 μˆ˜κ°€ 1이 될 λ•ŒκΉŒμ§€ λ‹€μŒ μž‘μ—…μ„ λ°˜λ³΅ν•˜λ©΄, λͺ¨λ“  수λ₯Ό 1둜 λ§Œλ“€ 수 μžˆλ‹€λŠ” μΆ”μΈ‘μž…λ‹ˆλ‹€. μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1-1. μž…λ ₯된 μˆ˜κ°€ 짝수라면 2둜 λ‚˜λˆ•λ‹ˆλ‹€.
1-2. μž…λ ₯된 μˆ˜κ°€ ν™€μˆ˜λΌλ©΄ 3을 κ³±ν•˜κ³  1을 λ”ν•©λ‹ˆλ‹€.
2. 결과둜 λ‚˜μ˜¨ μˆ˜μ— 같은 μž‘μ—…μ„ 1이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 주어진 μˆ˜κ°€ 6이라면 6 β†’ 3 β†’ 10 β†’ 5 β†’ 16 β†’ 8 β†’ 4 β†’ 2 β†’ 1 이 λ˜μ–΄ 총 8번 λ§Œμ— 1이 λ©λ‹ˆλ‹€. μœ„ μž‘μ—…μ„ λͺ‡ λ²ˆμ΄λ‚˜ λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄ μ£Όμ„Έμš”. 단, 주어진 μˆ˜κ°€ 1인 κ²½μš°μ—λŠ” 0을, μž‘μ—…μ„ 500번 λ°˜λ³΅ν•  λ•ŒκΉŒμ§€ 1이 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ –1을 λ°˜ν™˜ν•΄ μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­
μž…λ ₯된 수, num은 1 이상 8,000,000 미만인 μ •μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

nresult
68
164
626331-1

λ‚˜μ˜ 풀이

function soliution(num) {
  // 단, 주어진 μˆ˜κ°€ 1인 κ²½μš°μ—λŠ” 0을,
  if (num === 1) return 0;
  // λͺ‡λ²ˆμ΄λ‚˜ λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±
    let answer = 0;
  //μž…λ ₯된 μˆ˜κ°€ 짝수라면 2둜 λ‚˜λˆ•λ‹ˆλ‹€. : μž…λ ₯된 μˆ˜κ°€ ν™€μˆ˜λΌλ©΄ 3을 κ³±ν•˜κ³  1을 λ”ν•©λ‹ˆλ‹€.
	let collatzNum = num % 2 === 0? num/2 :num*3+1; 
  
  //  결과둜 λ‚˜μ˜¨ μˆ˜μ— 같은 μž‘μ—…μ„ 1이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•©λ‹ˆλ‹€.
  while( ){

  }
}

문제점
λ°˜λ³΅μ„ ν•΄μ•Όν•  풀이 μ½”λ“œλ₯Ό λ³€μˆ˜μ— ν• λ‹Ή 해버리고 μ–΄λ–»κ²Œ 해야할지 감을 μž‘μ§€ λͺ» 함.
answer에 ν• λ‹Ήν•œ μ½”λ“œλ₯Ό λ°˜λ³΅ν•˜λ €λ©΄ κΈ°λŠ₯을 ν•΄μ•Όν•˜λ‹ˆ ν•¨μˆ˜λ‘œ μ μš©ν•΄μ•Όν•˜λŠ” 건가..?
μ–΄λ–»κ²Œ λ°˜λ³΅λ¬Έμ„ 톡해
μ € answer에 λ“€μ–΄κ°„ μ½”λ“œλ₯Ό μ μš©ν• μ§€ κ·Έ μ΄μƒμ˜ 진도λ₯Ό λ‚˜κ°€μ§€ λͺ» ν•΄,,,
κ²°κ΅­ 풀이λ₯Ό μ‚΄νŽ΄λ³΄μ•˜λ‹€.


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

function solution(num) {
      var answer = 0;
    while(num !=1 && answer !=500){
        num%2==0 ? num = num/2 : num = num*3 +1;
    answer++;
  }
    return num == 1 ? answer : -1;
}

μœ κ°μŠ€λŸ½κ²Œλ„ 풀이에 λ‚΄κ°€ μ›ν•˜κ³ μž ν–ˆλ˜ 풀이λ₯Ό κ·ΈλŒ€λ‘œ ν’€μ–΄μ£Όμ‹  κ°œλ°œμžκ°€ 계셨닀..!

κ΅¬ν˜„ μ ‘κ·Ό 법

  1. λͺ‡λ²ˆμ΄λ‚˜ λ°˜λ³΅ν•΄μ•Ό ν•˜λŠ”μ§€ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±
    λ³€μˆ˜ answer = 0

  2. 결과둜 λ‚˜μ˜¨ μˆ˜μ— 같은 μž‘μ—…μ„ 1이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•©λ‹ˆλ‹€.
    μž…λ ₯된 μˆ˜κ°€ 짝수라면 2둜 λ‚˜λˆ•λ‹ˆλ‹€. : μž…λ ₯된 μˆ˜κ°€ ν™€μˆ˜λΌλ©΄ 3을 κ³±ν•˜κ³  1을 λ”ν•©λ‹ˆλ‹€.

  • while의 반볡 쑰건과 while λΈ”λ‘μ˜ num이 쑰건에 λ§žμ•„ λ–¨μ–΄μ§ˆ λ•ŒκΉŒμ§€ λ°˜λ³΅μ„ ν•˜λŠ” μ½”λ“œ κ΅¬ν˜„.
    (num != 1) num이 1이 μ•„λ‹ˆλ©΄ 계속 반볡.
    λΈ”λ‘μ˜ num에 값을 반볡 ν• λ‹Ή, answer 값을 λ”ν•΄μ€Œ.
  1. 단, 주어진 μˆ˜κ°€ 1인 κ²½μš°μ—λŠ” 0을
    μ œν•œ μ‘°κ±΄κΉŒμ§€ μ½”λ“œ κ΅¬ν˜„μ™„λ£Œ ν•œ 정말 λ‚΄κ°€ κ·ΈλŒ€λ‘œ κ΅¬ν˜„ν•˜κ³  μ‹Άλ˜ ν•¨μˆ˜ κ·Έ μžμ²΄μ˜€λ‹€..!
gpt에 λ‚΄ μ½”λ“œλ₯Ό κ°œμ„  해달라고 μš”μ²­ν–ˆμ„ λ•Œ 받은 닡변이닀. μ—¬κΈ°μ„œ μ°Έκ³ ν•  수 μžˆμ—ˆλ˜ 건 μœ„ ν’€μ΄μ—μ„œ while λΈ”λ‘μ˜ num을 μ‚Όν•­ μ‘°κ±΄λ§ˆλ‹€ ν• λ‹Ήν•˜λŠ” 방식을
gpt의 λ‹΅λ³€μ—μ„œλŠ” num μžμ²΄μ—λ‹€ 쑰건 μ—°μ‚°μžλ₯Ό ν• λ‹Ήν•˜λŠ” 것이 λ¦¬νŒ©ν„°λ§ 될 수 μžˆλŠ” μ½”λ“œμ΄μ§€ μ•Šμ„κΉŒ μƒκ°ν–ˆλ‹€.
 while(num !=1 && answer !=500){
        num%2==0 ? num = num/2 : num = num*3 +1;
    answer++;
  }

// 이와 같이 μˆ˜μ •μ΄ 될 수 μžˆμ„ 것 κ°™λ‹€.
while(num !=1 && answer !=500){
        num = num%2==0 ? num/2 : num*3 +1;
    answer++;
  }


#2

function collatz(num, count = 0) {
    return (num == 1) ? ((count >= 500) ? -1 : count) : collatz((num % 2 == 0) ? num / 2 : (num * 3) + 1, ++count);
}

κ΅¬ν˜„ μ ‘κ·Ό 법

  1. λ§€κ°œλ³€μˆ˜ μžμ²΄μ— λ‘λ²ˆμ§Έ 인자둜 리턴할 μ΅œμ’… 값을 μ„ μ–Έ ν•˜κ³ .
  2. μ‘°κ±΄μ—°μ‚°μžμ™€ μž¬κ·€λ₯Ό 톡해 ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ°˜λ³΅ν•˜μ—¬ 리턴 값을 κ΅¬ν•˜λŠ” 것이 인상 κΉŠμ—ˆλ‹€.

🧐 였늘의 ν•™μŠ΅

λ³€μˆ˜μ— ν• λ‹Ήν•œ 값을 λ°˜λ³΅ν•΄μ„œ μ›ν•œλŠ” 값을 얻을렀면 ν•¨μˆ˜λ₯Ό 톡해 재 ν˜ΈμΆœν•΄μ„œ κΈ°λŠ₯을 ν•΄λ‚΄λŠ” 것도 κ°€λŠ₯ν•˜μ§€λ§Œ(= μž¬κ·€),
반볡문 내에 μ μš©ν•˜λ €λŠ” λ³€μˆ˜ ν‘œν˜„μ‹μ„ μ μš©ν•˜μ—¬ μ–»κ³ μž ν•˜λŠ” 값을 μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜λ‹€.

즉, 반볡문 μžμ²΄λ„ κΈ°λŠ₯μΈμ…ˆ..!

profile
방법을 연ꡬ할 쀄 μ•„λŠ” 개발자!

0개의 λŒ“κΈ€