[백준] 10859번_뒤집어진 소수 Python
in Study on Coding Test
정답제출코드
def prime(N):
if N < 2:
return False
for i in range(2, int(N ** 0.5) + 1):
if N % i == 0:
return False
return True
def rev_(N):
N_tmp = str(N)
length = len(N_tmp)
count_to_change = 1
for i in range(length-1, -1, -1):
# 더 볼 것도 없이 no를 출력해야하므로 그냥 1을 반환시킨다.
if N_tmp[i] == '3' or N_tmp[i] == '4' or N_tmp[i] == '7':
return 1
elif N_tmp[i] == '6':
# N_tmp[i] = '9'
N -= count_to_change * 6
N += count_to_change * 9
elif N_tmp[i] == '9':
# N_tmp[i] = '6'
N -= count_to_change * 9
N += count_to_change * 6
count_to_change *= 10
N_tmp2 = ''
N_tmp = str(N)
for i in range(0, length):
N_tmp2 += N_tmp[length-1-i]
N = int(N_tmp2)
return N
N = int(input())
if prime(N):
if prime(rev_(N)):
print('yes')
else:
print('no')
else:
print('no')
소스코드 설명
list, reverse를 쓰려고 하면 시간초과 뜨는 것 같아서 리스트를 쓰지 않는 방법을 생각함.
그 결과가 count_to_change를 이용해서 1의자리, 10의자리, 100의자리에 6, 9가 오면 서로를 바꿔주는 코드를 이용함.그리고 N_tmp2 문자열을 선언해서 N_tmp에 있는 문자열을 역순으로 새로 담아주는 코드를 작성하고 그것을 int로 변환하여 N을 return함.
반환받은 N이 소수인지 아닌지를 판별함
제출 결과
사실 list를 써도 되는 것이었나보다..
python3로 제출할 땐 시간초과가 떴는데 같은 코드를 pypy3로 제출하니 정답으로 판정받았다.