나의 풀이
import math
#10진법을 k진법으로 변환
def solution(num, n):
result = []
if num == 0:
result.append(0)
while num > 0:
if num % n < 10:
result.append(num % n)
else:
result.append(chr(num % n - 10 + ord('A')))
num //= n
list_str1=join_split(result[::-1])
list_str1=list(filter(None, list_str1))
return counter(list_str1)
#소수인지 판별
def isPrime(x):
if x ==1: return False
for i in range(2, int(math.sqrt(x))+1): #만약에 x가 2라면 for i in range(2,2)가 된다. 그냥 지나감
if x % i ==0:
return False
else: #else는 for문을 정상적으로 다 돌은 경우를 의미한다.
return True
#반환된 리스트를 문자열로 만듬
def join_split(tmp):
str1=""
for x in tmp:
str1+=str(x)
str1=str1.split('0')
return str1
#소수의 갯수를 count
def counter(str1):
cnt=0
for i in str1:
if isPrime(int(i)):
cnt+=1
return cnt
n = 110011
k = 10
print(solution(n, k))
▶ P는 각 자릿수에 0을 포함하지 않는 소수입니다
→0을 기준으로 split()을 하고, 만약 '' 빈 문자열이 있는 경우에는 filter() 함수를 써서 제거한다.
▶ list_str1=list(filter(None, list_str1)) →리스트의 요소 중에 빈 문자열이 있는 경우 그 요소를 삭제한다.
다른 사람의 풀이
# 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
'프로그래머스(파이썬) > LV.2(파이썬)' 카테고리의 다른 글
더 맵게 → heap★★ (0) | 2023.01.02 |
---|---|
귤 고르기→ Counter() 함수, most_common() (0) | 2023.01.02 |
타켓넘버→ DFS(깊이우선탐색)★★+요소 더하기, 요소 빼기+ 재귀함수 (0) | 2022.12.30 |
전화번호 목록 →기준값 갱신+startswith()+숫자문자열 정렬★★ (0) | 2022.12.29 |
뉴스 클러스터링→isalpha(), str1[i:i+2], set(), count()★★ (0) | 2022.12.28 |