ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 1124 μ–Έλ”ν”„λΌμž„ with Python
    PS 2023. 4. 11. 15:20
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 1124 μ–Έλ”ν”„λΌμž„

    πŸ’‘ 쑰건

    1. μžμ—°μˆ˜ Xλ₯Ό μ†ŒμΈμˆ˜λΆ„ν•΄ν•˜λ©΄, κ³±ν•΄μ„œ Xκ°€ λ˜λŠ” μ†Œμˆ˜μ˜ λͺ©λ‘μ„ 얻을 수 μžˆλ‹€.
      예λ₯Ό λ“€μ–΄, 12 = 2 Γ— 2 Γ— 3이닀. 1은 μ†Œμˆ˜κ°€ μ•„λ‹ˆλ‹€.

    2. μ–΄λ–€ 수 Xλ₯Ό μ†ŒμΈμˆ˜λΆ„ν•΄ ν•΄μ„œ κ΅¬ν•œ μ†Œμˆ˜μ˜ λͺ©λ‘μ˜ 길이가 μ†Œμˆ˜μ΄λ©΄, κ·Έ 수λ₯Ό μ–Έλ”ν”„λΌμž„ 이라고 ν•œλ‹€.

    3. 12λŠ” λͺ©λ‘μ— ν¬ν•¨λœ μ†Œμˆ˜μ˜ κ°œμˆ˜κ°€ 3개이고, 3은 μ†Œμˆ˜μ΄λ‹ˆ 12λŠ” μ–Έλ”ν”„λΌμž„μ΄λ‹€.

    4. 두 μ •μˆ˜ A와 Bκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, A보닀 ν¬κ±°λ‚˜ κ°™κ³ , B보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜ μ€‘μ—μ„œ μ–Έλ”ν”„λΌμž„μΈ κ²ƒμ˜ 개수λ₯Ό κ΅¬ν•˜λŠ” 문제

    5. 2 ≀ A ≀ B ≀ 100,000

    6. μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체, μˆ˜ν•™, μ†Œμˆ˜νŒμ • μœ ν˜•μ˜ 문제

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제 1

    2 10

    μ‹€ν–‰κ²°κ³Ό 1

    5

    예제 2

    100 105

    μ‹€ν–‰κ²°κ³Ό 2

    2

    예제 3

    17 17

    μ‹€ν–‰κ²°κ³Ό 3

    0

    예제 4

    123 456

    μ‹€ν–‰κ²°κ³Ό 4

    217

    ⌨️ 문제 풀이

    1. μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ΄μš©ν•΄ μ†Œμˆ˜λ₯Ό νŒλ‹¨ν•  수 μžˆλŠ” is_prime λ¦¬μŠ€νŠΈμ™€ νŒμ •λœ μ†Œμˆ˜λ₯Ό 담을 primes 리슀트λ₯Ό λ§Œλ“ λ‹€.

    2. 0κ³Ό 1은 μ†Œμˆ˜κ°€ μ•„λ‹ˆκΈ°μ—, is_prime λ¦¬μŠ€νŠΈμ—μ„œ λ°˜λ“œμ‹œ 0 값을 λ„£μ–΄μ€˜μ•Ό ν•œλ‹€.

    3. A λΆ€ν„° B κΉŒμ§€μ˜ λ²”μœ„λ₯Ό μˆœνšŒν•˜λ©΄μ„œ, λ§Œλ“€μ–΄ 놓은 primes 배열도 μˆœνšŒν•œλ‹€.
      A λΆ€ν„° B κΉŒμ§€μ˜ λ²”μœ„μ˜ 숫자λ₯Ό primes λ°°μ—΄μ˜ 숫자둜 λ‚˜λˆ„λ©΄μ„œ 1을 μ œμ™Έν•œ μ†Œμˆ˜μ˜ 개수λ₯Ό μ„Όλ‹€.

    4. (3)μ—μ„œ λ‚˜μ˜¨ μˆ«μžκ°€ is_primeμ—μ„œ μ†Œμˆ˜λ‘œ νŒλ³„μ΄ λœλ‹€λ©΄ res += 1

    5. A λΆ€ν„° B κΉŒμ§€ μˆœνšŒκ°€ 끝났닀면, res λ₯Ό λ°˜ν™˜ν•œ ν›„ 좜λ ₯ν•œλ‹€.

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    
    a, b = map(int, stdin.readline().split())
    is_prime = [1 for i in range(100001)]
    primes = []
    is_prime[0:1] = 0, 0
    
    
    def prime_checker():
        for i in range(2, 100000):
            if is_prime[i] == 1:
                primes.append(i)
                temp, length = i + i, len(is_prime)
                while length > temp:
                    is_prime[temp] = 0
                    temp += i
    
    
    def check_under_prime(a, b):
        prime_checker()
    
        res = 0
        for i in range(a, b + 1):
            cnt, idx = 0, 0
            while 1:
                if i % primes[idx] == 0:
                    cnt += 1
                    i //= primes[idx]
    
                    if i == 1:
                        break
                else:
                    idx += 1
            if is_prime[cnt] == 1:
                res += 1
    
        return res
    
    
    print(check_under_prime(a, b))
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.