https://school.programmers.co.kr/learn/courses/30/lessons/92335
내 풀이
import string
import math
tmp = string.digits+string.ascii_lowercase
def solution(n, k):
count=0
tmp_result=convert(n,k)
result = tmp_result.split('0')
print(result)
for i in result:
if len(i)==0:
continue
if check_prime(int(i)):
count +=1
return count
def convert(num, base) :
q, r = divmod(num, base)
if q == 0 :
return str(tmp[r])
else :
return str(convert(q, base) + tmp[r])
def check_prime(n):
if n==1:
return False
for i in range(2,int(math.sqrt((n))) +1 ):
if n%i==0:
return False
return True
몇 가지 가져갈 점이 있다고 생각하는데
1) 10진수를 n번쨰로 변환하는 방법
그냥 나눠주면 된다. 다만 여기서 str로 변환한 이유는 문자열 처리 때문이다.
2) 소수판단하는 방법
흔히들 하는 소수판단법은 2부터 자기자신 -1 까지 나눠지는지 여부를 판단하는 것이다.
기본 아이디어는 같지만, 포인트는 제곱근까지 가능한지 확인 해보면되는것이다.
가령 16이라고 한다면 원래는 2,~15까지 다 나눠보겠지만
그게 아니라 2부터 4까지만 확인해보면 되는데 이유는, 간단하다 어차피 그 뒤는 순서가 바꼈을 뿐 같은 수이기 때문이다
2 * 8, 4 * 4 ,
4 * 4, 8 * 2
다른사람의 풀이
def solution(n, k):
word=""
while n: # 숫자를 k진법으로 변환
word = str(n%k)+word
n=n//k
word=word.split("0") # 변환된 숫자를 0을 기준으로 나눈다.
count=0
for w in word:
if len(w)==0: # 만약 0또는 1이거나 빈공간이라면 continue를 통해 건너뛴다.
continue
if int(w)<2:
continue
sosu=True
for i in range(2,int(int(w)**0.5)+1): # 소수찾기
if int(w)%i==0:
sosu=False
break
if sosu:
count+=1
return count
'취준 > 프로그래머스' 카테고리의 다른 글
행렬의 곱셈 - 파이썬 (0) | 2022.09.12 |
---|---|
영어 끝말잇기 - 파이썬 (0) | 2022.09.12 |
최고의 집합 - 파이썬 (0) | 2022.09.11 |
주차 요금 계산 - 파이썬 (0) | 2022.09.09 |
캐시 - 파이썬 (0) | 2022.09.08 |