[백준] 10859번_뒤집어진 소수 Python

정답제출코드


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로 제출하니 정답으로 판정받았다.

결과


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2