250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 2 (kμ§„μˆ˜μ—μ„œ μ†Œμˆ˜ 개수 κ΅¬ν•˜κΈ°) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 2 (kμ§„μˆ˜μ—μ„œ μ†Œμˆ˜ 개수 κ΅¬ν•˜κΈ°)

γ…… γ…œ γ…” γ…‡ 2022. 10. 31. 23:40
728x90

1. 문제 μ„€λͺ…

μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ§‘λ‹ˆλ‹€. 이 숫자λ₯Ό kμ§„μˆ˜λ‘œ 바꿨을 λ•Œ, λ³€ν™˜λœ 수 μ•ˆμ— μ•„λž˜ 쑰건에 λ§žλŠ” μ†Œμˆ˜(Prime number)κ°€ λͺ‡ κ°œμΈμ§€ μ•Œμ•„λ³΄λ € ν•©λ‹ˆλ‹€.

  • 0P0처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 0이 μžˆλŠ” 경우
  • P0처럼 μ†Œμˆ˜ 였λ₯Έμͺ½μ—λ§Œ 0이 있고 μ™Όμͺ½μ—λŠ” 아무것도 μ—†λŠ” 경우
  • 0P처럼 μ†Œμˆ˜ μ™Όμͺ½μ—λ§Œ 0이 있고 였λ₯Έμͺ½μ—λŠ” 아무것도 μ—†λŠ” 경우
  • P처럼 μ†Œμˆ˜ μ–‘μͺ½μ— 아무것도 μ—†λŠ” 경우
  • 단, PλŠ” 각 μžλ¦Ώμˆ˜μ— 0을 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” μ†Œμˆ˜μž…λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, 101은 Pκ°€ 될 수 μ—†μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 437674을 3μ§„μˆ˜λ‘œ λ°”κΎΈλ©΄ 211020101011μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ 찾을 수 μžˆλŠ” 쑰건에 λ§žλŠ” μ†Œμˆ˜λŠ” μ™Όμͺ½λΆ€ν„° μˆœμ„œλŒ€λ‘œ 211, 2, 11이 있으며, 총 3κ°œμž…λ‹ˆλ‹€. (211, 2, 11을 kμ§„λ²•μœΌλ‘œ λ³΄μ•˜μ„ λ•Œκ°€ μ•„λ‹Œ, 10μ§„λ²•μœΌλ‘œ λ³΄μ•˜μ„ λ•Œ μ†Œμˆ˜μ—¬μ•Ό ν•œλ‹€λŠ” 점에 μ£Όμ˜ν•©λ‹ˆλ‹€.) 211은 P0 ν˜•νƒœμ—μ„œ 찾을 수 있으며, 2λŠ” 0P0μ—μ„œ, 11은 0Pμ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •μˆ˜ nκ³Ό kκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. n을 kμ§„μˆ˜λ‘œ 바꿨을 λ•Œ, λ³€ν™˜λœ 수 μ•ˆμ—μ„œ 찾을 수 μžˆλŠ” μœ„ 쑰건에 λ§žλŠ” μ†Œμˆ˜μ˜ 개수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

 

 

2. μ œν•œ 쑰건

  • 1 ≤ n ≤ 1,000,000
  • 3 ≤ k ≤ 10

 

 

 

 

 

3. λ‚΄ 풀이

- 첫 번째 μ‹œλ„ (정확도 : 88.1)

import string
tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r] 
    else :
        return convert(q, base) + tmp[r]
    
def is_prime_number(x):
    for i in range(2, x):
        if x % i == 0:
            return False
    return True
    
def solution(n, k):
    answer = 0
    num = convert(n,k).split('0')
    for i in num:
        try:
            if int(i) >= 2 and is_prime_number(int(i)):
                answer += 1
        except:
            pass
    return answer

 

1. 숫자λ₯Ό kμ§„μˆ˜λ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜ 생성

2. μ†Œμˆ˜ νŒλ³„ ν•¨μˆ˜ 생성

3. n을 kμ§„μˆ˜λ‘œ λ³€ν™˜ν›„ 0을 κΈ°μ€€μœΌλ‘œ λ‚˜λˆ„μ–΄ 리슀트 생성

4. 리슀트의 μ›μ†Œκ°€ μ†Œμˆ˜μ΄λ©΄ answer + 1 ν•˜μ—¬ 총 μ†Œμˆ˜μ˜ 개수λ₯Ό λ°˜ν™˜

(ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 1번 μ‹œκ°„ 초과)

 

 

import math

# μ†Œμˆ˜ νŒλ³„
def primenumber(x):
    for i in range (2, int(math.sqrt(x) + 1)):
    	if x % i == 0:
        	return False
    return True	
    
def solution(n, k):
    answer = 0
    tmp = ''
    if k != 10:
        while n:
            tmp += str(n%k)
            n = n//k
        tmp = tmp[::-1]
    else:
        tmp = str(n)
    tmp_list = tmp.split('0')
    tmp_list = [x for x in tmp_list if x]
    for i in tmp_list:
        if int(i) >= 2 and primenumber(int(i)):
            answer += 1
    return answer

 

 

1. μ†Œμˆ˜ νŒλ³„ ν•¨μˆ˜λ₯Ό μ œκ³±κ·ΌκΉŒμ§€λ§Œ κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜λ‘œ λ³€κ²½ 

2. kμ§„μˆ˜ λ³€ν™˜ : kκ°€ 10이 μ•„λ‹Œ 경우 for문을 μ‚¬μš©ν•˜μ—¬ n을 k둜 λ‚˜λˆ„κ³ , λ‚˜λ¨Έμ§€λ₯Ό tmp에 μΆ”κ°€ν•˜λŠ” 방식 μ‚¬μš©

-> 배열을 거꾸둜 ν•˜μ—¬ μ΅œμ’… tmp 

3. kκ°€ 10인 κ²½μš°μ—λŠ” κ·ΈλŒ€λ‘œ n μ‚¬μš©

4. tmpλ₯Ό 0을 κΈ°μ€€μœΌλ‘œ λΆ„ν•  ν›„ 곡백 μ œκ±°ν•˜μ—¬ 리슀트 λ°˜ν™˜

5. 리슀트 λ‚΄μ˜ μˆ«μžκ°€ 2 이상이고 μ†Œμˆ˜μΈ κ²½μš°μ—λ§Œ answer + 1

 

 

 

 

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

# n을 kμ§„λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Έ λ¬Έμžμ—΄ λ°˜ν™˜
def conv(n, k):
    s = ''
    while n:
        s += str(n%k)
        n //= k
    return s[::-1]

# n이 μ†Œμˆ˜μΈμ§€ νŒμ •
def isprime(n):
    if n <= 1: return False
    i = 2
    while i*i <= n:
        if n%i == 0: return False
        i += 1
    return True

def solution(n, k):
    s = conv(n,k)
    cnt = 0
    for num in s.split('0'):
        if not num: continue # 빈 λ¬Έμžμ—΄μ— λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬
        if isprime(int(num)): cnt += 1
    return cnt

1. n을 kμ§„λ²•μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜

2. μ†Œμˆ˜μΈμ§€ νŒλ³„ν•˜λŠ” ν•¨μˆ˜ 생성 (1인 경우 False λ°˜ν™˜)

3. kμ§„λ²•μœΌλ‘œ λ³€ν™˜λœ λ¬Έμžμ—΄μ„ 0을 κΈ°μ€€μœΌλ‘œ λΆ„ν™œν•˜κ³ , 빈 λ¬Έμžμ—΄μ— λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•œ λ’€, μ†Œμˆ˜μΈ 경우 +1

728x90
Comments