πŸ•΅οΈβ€β™€οΈ μ†Œμˆ˜ μ°ΎκΈ°

νŒ”λ¦¬λ™Β·2021λ…„ 8μ›” 12일
0

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ†Œμˆ˜ μ°ΎκΈ° level2 풀이과정과 κ³ λ―Ό ( μ •λ‹΅ μ½”λ“œ μ—†μŒ )

μ†Œμˆ˜ μ°ΎκΈ°

풀이 κ³Όμ •

  • 문제λ₯Ό 보자마자 μƒκ°ν•œ 건 경우의 수 μ˜€λ‹€.
    λ‹€ν–‰νžˆ λ°°μ—΄μ˜ μ΅œλŒ€ κΈΈμ΄λŠ” 7μ΄μ—ˆκ³  λŒ€μΆ© κ³„μ‚°ν•΄λ³΄λ‹ˆ μ΅œλŒ€ 12800κ°œμ •λ„μ˜ 경우의 μˆ˜κ°€ λ‚˜μ™”λ‹€.
    근데 κ°€λ§Œ 생각을 ν•΄λ³΄λ‹ˆ 12800개의 숫자λ₯Ό ν•˜λ‚˜μ‹ μ†Œμˆ˜λ₯Ό νŒλ‹¨ν•΄μ•Όν•˜λ‹ˆ μ‹œκ°„ λ³΅μž‘λ„κ°€ λ„ˆλ¬΄ 컀질 것 κ°™μ•˜λ‹€.

μ†Œμˆ˜λ₯Ό νŒλ‹¨ν•˜λŠ” κ°€μž₯ λΉ λ₯Έ 둜직

  • μ†Œμˆ˜λ₯Ό νŒλ‹¨ν•˜λ €λ©΄ λ‹¨μˆœ λ¬΄μ‹ν•˜κ²Œ 2λΆ€ν„° νŒλ‹¨ν•˜λ €λŠ” 숫자n-1 κΉŒμ§€ λ°˜λ³΅λ¬Έμ„ λŒλ©΄μ„œ n을 λ‚˜λˆ„μ–΄μ„œ μ†Œμˆ˜μΈμ§€ νŒλ‹¨μ„ ν•œλ‹€.

    • μ΄λ ‡κ²Œ 되면 7자리 μˆ«μžλŠ” 1개 νŒλ‹¨ν•˜λŠ”λ° μ΅œμ†Œ λ°±λ§Œλ²ˆμ„ λ„˜κ²Œ νŒλ‹¨ν•΄μ•Όν•˜λ‹ˆ μ ˆλŒ€ μ ˆλŒ€ μ“Έ 수 μ—†λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • μ–΄λ–»κ²Œ ν•˜λ©΄ 더 μ‹œκ°„μ„ 쀄일 수 μžˆμ„κΉŒ κ³ λ―Όν•˜λ‹€κ°€ λ“  생각이 νŒλ‹¬ν•  숫자의 μ ˆλ°˜μ„ λ„˜μ€ μˆ˜λŠ” μ ˆλŒ€ μ•½μˆ˜κ°€ 될 수 μ—†λ‹€λŠ”κ²Œ 생각이 났닀.
    κ·Έλž˜μ„œ 반볡문의 횟수λ₯Ό λ°˜μ„ 쀄일 수 μžˆλ‹€.
    ν•˜μ§€λ§Œ μ—­μ‹œλ‚˜ 아직은 λΆ€μ‘±ν•˜λ‹€.

  • 이전에 μžλ£Œκ΅¬μ‘°κ³΅λΆ€ν•  λ•Œ μ†Œμˆ˜ κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ 배운게 μƒκ°μ΄λ‚˜μ„œ 책을 μ‚΄νŽ΄λ΄€λŠ”λ° λ‚˜λˆ„λ €λŠ” 숫자의 제곱근 λ°‘μœΌλ‘œ λ‚˜λˆˆλ‹€λŠ” κ°œλ…μ„ μ•Œκ²Œ 됐닀.
    μ œκ³±μ€ λ°‘μœΌλ‘œλ§Œ λ‚˜λˆ„λ©΄ μ†Œμˆ˜μΈμ§€ νŒλ‹¨μ„ ν•  수 μžˆλ‹€λŠ” κ±Έ μ•Œκ²Œ 됐고
    νŒŒμ΄μ¬μ—μ„œ μ œκ³±κ·Όμ„ κ΅¬ν•˜λŠ” λͺ¨λ“ˆμ„ κ²€μƒ‰ν•΄μ„œ μ•Œκ²Œ 됐닀.
    μ‹œκ°„λ³΅μž‘λ„λŠ” O(√n)이 λœλ‹€.

import math 

math.sqrt()

sqrt()λ₯Ό ν™œμš©ν•΄μ„œ μ œκ³±κ·Όμ„ ꡬ할 수 있게 됐닀.

  • 그리고 μ†Œμˆ˜λ₯Ό νŒλ³„ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλ‹€.
def sosu(n):
    if n < 2: 
        return False

    num = int(math.sqrt(n)) + 1
    for i in range(2, num):
        if n % i == 0: 
            return False
    return True

μˆœμ—΄μ„ λ§Œλ“œλŠ”λ²•

  • νš¨μœ¨μ’‹μ€ μ†Œμˆ˜νŒλ³„κΈ° ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλŠ”λ° λ¬Έμ œκ°€ 생겼닀.
    λ¬Έμžμ—΄λ‘œ μž…λ ₯을 받은 μˆ«μžλ“€μ„ 1자리 2자리 3자리 수둜 λͺ¨λ“  경우의 수λ₯Ό κ΅¬ν˜„ν•˜λŠ”λ²•μ΄ λ– μ˜€λ₯΄μ§€ μ•Šμ•˜λ‹€.
    벌써 문제λ₯Ό ν‘ΈλŠ” μ‹œκ°„μ΄ 3μ‹œκ°„μ΄ μ§€λ‚˜κ°€κ²Œ 되고 μ§€μ³μ„œ 풀이법을 보게 됐닀.

permutations

  • μˆœμ—΄μ„ λ§Œλ“€μ–΄λ‚΄λŠ” ν•¨μˆ˜ permutationsλ₯Ό μ•Œκ²Œ 됐닀.
    μ•„ 이런 κ°•λ ₯ν•œ κΈ°λŠ₯을 λ‚΄μž₯ν•˜λ‹€λ‹ˆ ν•˜λ©΄μ„œ μˆ˜ν•™μ— λŒ€ν•œ μ΄ν•΄μ˜ 뢀쑱이 마음이 μ•„νŒ λ‹€.

permutations(number, i) ν•¨μˆ˜λŠ” μΈμžμ— μˆœμ—΄λ‘œ λ§Œλ“€ μˆ«μžμ™€ 자리수(i)λ₯Ό λ„˜κ²¨μ£Όλ©΄ μ΄ν„°λ ˆμ΄λΈ” 객체둜 λ°˜ν™˜ν•˜κ³  반볡문 λŒλ €μ„œ 꺼내보면 νŠœν”Œλ‘œ λ‚˜μ˜¨λ‹€. νŠœν”Œμ˜ 각 μˆ«μžλŠ” λ¬Έμžμ—΄λ‘œ λ°˜ν™˜λ˜κΈ° λ•Œλ¬Έμ— intν•¨μˆ˜λ₯Ό μ¨μ•Όν•œλ‹€.

κ²°κ΅­

  • λ°©λ²•λ§Œ μ•Œμ•˜μœΌλ©΄ λ‚˜λ¨Έμ§€λ₯Ό ν’€μ—ˆμ–΄μ•Ό ν•˜λŠ”λ° λ„ˆλ¬΄ μ§€μ³μ„œ 풀이 κ³Όμ •κΉŒμ§€ 보고 ν’€μ—ˆλ‹€.

  • setν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ λ°˜ν™˜λœ 값을 리슀트둜 λ§Œλ“€μ–΄μ„œ 013 κ³Ό 13같은 숫자λ₯Ό λ™μΌν•˜κ²Œ μ²˜λ¦¬ν–ˆλ‹€.

  • 비둝 또 λͺ»ν’€μ—ˆμ§€λ§Œ λ‹€μ–‘ν•œ 방법을 μ•Œμ•„κ°„λ‹€ μƒκ°ν•˜κ³  ν¬κΈ°ν•˜μ§€λ§κ³  μ—΄μ‹¬νžˆ ν•˜μž!

  • μ½”λ“œλŠ” κΉƒν—™ μ°Έμ‘°

profile
λ°°μ›€μ˜ 기둝

0개의 λŒ“κΈ€