- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92335

 

Lv2. 문제이고, 스스로 푼 문제다!

마지막에 '0'이 0개인지 아닌지에 따라서 조건문을 나눴는데 그렇게 할 필요가 없었다 

 

문제 이해 

조건을 만족하는 수는 모두 0을 기준으로 나뉘어지므로 n을 k진수로 변경한다음 0을 제외한 수들이 10진수에서 소수인지 확인하는 로직으로 진행하면 된다 

1. 주어진 수 n을 k진수로 변경 후 changed에 저장한다(여기서 changed는 문자열)

2. changed에서 0을 기준으로 숫자들을 구분한 뒤 changed에 저장한다(여기서 changed는 리스트)

3. 구분된 숫자들 중에서 소수가 있으면 answer += 1을 해준다

 

- 정답 풀이 :

import math
def isPrime(num):
    if num <= 1:
        return False
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            return False
    return True
                       
def solution(n, k):
    answer = 0
    temp = n
    changed = ''
    mul = 0
    while True:
        if temp // k == 0:
            break
        temp //= k
        mul += 1
    
    temp = n
    for i in range(mul, -1, -1):        
        if temp // (k ** i) != 0:
            changed += str(temp // (k ** i)) 
            temp = temp - (k ** i) * (temp // (k ** i))
        else:
            changed += '0'
         
   
    changed = changed.split('0')
    for each in changed:
        if len(each) != 0:   
            if isPrime(int(each)):
                answer += 1
    return answer

 

- 시도해본 풀이 : 

테스트 16개 중 2개에서 계속 틀렸다 

어차피 0을 기준으로 숫자들을 구분하기 때문에 0의 갯수가 0개인 경우를 따로 확인할 필요는 없다 

 

여기를 뺀 뒤 돌렸더니 코드가 정상 작동했다 

    if changed.count('0') == 0 :
        if isPrime(n):
            return 1
        else:
            return 0
import math
def isPrime(num):
    flag = True
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            flag = False
            break
    if flag:
        return True
    else:
        return False
                       
def solution(n, k):
    answer = 0
    temp = n
    changed = ''
    mul = 0
    while True:
        if temp // k == 0:
            break
        temp //= k
        mul += 1
    
    temp = n
    for i in range(mul, -1, -1):        
        if temp // (k ** i) != 0:
            changed += str(temp // (k ** i)) 
            temp = temp - (k ** i) * (temp // (k ** i))
        else:
            changed += '0'
         
    if changed.count('0') == 0 :
        if isPrime(n):
            return 1
        else:
            return 0
    else: 
        changed = changed.split('0')
        for each in changed:
            if len(each) != 0 and int(each) > 1:   
                if isPrime(int(each)):
                    answer += 1
        return answer

+ Recent posts