def CheckPrime(n):
if '0' in n or n == '1' :
return False
n = int(n)
for i in range(2, n):
if n % i == 0 :
return False
return True
def solution(n, k):
answer = 0
num = ''
while (True) :
num += str(n % k)
n //= k
if n == 0 :
break
num = num[::-1]
if CheckPrime(num) : # num 자체가 소수일 때 (조건 4)
return num
else : # 조건 1 ~ 조건 3
start = 0
for i in range(len(num)) :
if num[i] == '0' :
if i != start and CheckPrime(num[start:i]) :
answer += 1
start = i+1
if CheckPrime(num[start:]) :
answer += 1
return answer
테스트케이스 여러 개 추가하면서 해보다가
105, 3 넣어봤는데 사진처럼 오류 뜸 ,,
105를 3진수로 변환하면 10220 이라서 0이 맨 마지막에 오는데
마지막 for문에서 start 는 i+1 된 채로 끝나니까
5 가 된 채로 CheckPrime(num[start:]) 이 호출됨.
그래서 오류난 듯 존재하지 않는 인덱스라서 .. ㅎㅎㅎ.ㅎ.ㅎ.ㅎ..ㅎㅎ..
if start < len(num) and CheckPrime(num[start:]) :
answer += 1
if 조건에 start < len(num) 추가해줬더니
런타임 에러 뜨던 12번은 통과됨 ,, 그렇담 나머지는?
if CheckPrime(num) :
return answer + 1
이거 조건 4번 (P처럼 소수 양쪽에 아무것도 없는 경우) 때문에 써놓은 건데
뭔 생각으로 return num 이라고 적어놨던건지 모르겠음 .....
암튼 2번도 통과됐으니까 이제 시간 초과만 해결하면 돼 ,, ㅇ읗ㄹ
for i in range(2, math.ceil(math.sqrt(n))):
if n % i == 0 :
return False
헐 대박,,,, 하면서 range 범위 바꿨는데
이번엔 시간초과 해결되고 다른 테케가 오류남 뭐야요 대체?
라고 말하고 math.floor(math.sqrt(n)) + 1 로 바꿔주니까 해결됨 ㅎ. ㅎ
예를 들어 n = 9일 때 math.sqrt(9) 는 3으로 딱 나눠떨어져서
ceil() 이든 floor() 든 상관없이 3 이 나오게 됨.
근데 그렇게 되면 i 가 2까지만 돌게 되니까 나눠떨어지는 게 없어서 소수로 인식하는 듯
그래서 그냥 ceil() 대신 floor() 로 내림해주고 +1 해주니까 통과된 것 가틈
import math
def CheckPrime(n):
n = int(n)
if '0' in str(n) or n == 1 :
return False
for i in range(2, math.floor(math.sqrt(n))+1):
if n % i == 0 :
return False
return True
def solution(n, k):
answer = 0
num = ''
while (True) :
num += str(n % k)
n //= k
if n == 0 :
break
num = num[::-1]
if CheckPrime(num) :
return answer + 1
else :
start = 0
for i in range(len(num)) :
if num[i] == '0' :
if i != start and CheckPrime(num[start:i]) :
answer += 1
start = i+1
if start < len(num) and CheckPrime(num[start:]) :
answer += 1
return answer
드뎌 해결 ,,,
'알고리즘' 카테고리의 다른 글
[프로그래머스 Lv2] N-Queen (Python) (1) | 2022.09.22 |
---|---|
[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] 양궁 대회 (Python) (3) | 2022.09.19 |
[프로그래머스 Lv2 - 2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산 (Python) (0) | 2022.09.16 |
[프로그래머스 Lv1 - 2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 (Python) (0) | 2022.09.07 |
[프로그래머스 Lv3] - 숫자 게임 (Python) (1) | 2022.08.06 |