본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Bronze 3][Python] 7789번 : 텔레프라임

by 빛밤하늘 2021. 5. 18.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

7789번: 텔레프라임

소수를 매우 좋아하는 수학자가 있다. 이 수학자는 매번 전화번호를 받을 때 마다, 그 전화번호가 소수인지 아닌지를 검사한다. 수학자는 자신의 모든 친구의 전화번호가 소수인지 아닌지를 기

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin

# 첫째 줄에 여섯 자리의 기존 전화번호, 새로 추가되는 한 자리 번호를 공백으로 구분해 입력합니다.
# 기존 전화번호는 0으로 시작하지 않으며,
# 새로 추가되는 한 자리 번호는 0이 아닙니다.
origin_number, add_number = stdin.readline().rstrip().split(' ')

# 기존 전화번호의 제곱근 이하의 수 중 가장 가까운 자연수를 저장하는 변수를 선언합니다.
origin_number_root = int(int(origin_number) ** 0.5)

# 기존 전화번호 앞에 새로 추가되는 한 자리 번호를 붙이고 정수형으로 변환해서 저장하는 변수를 선언합니다.
new_number = int(add_number + origin_number)
# new_number의 제곱근 이하의 수 중 가장 가까운 자연수를 저장하는 변수를 선언합니다.
new_number_root = int(new_number ** 0.5)

# 원래 전화번호와 새로운 전화번호가 소수인지 아닌지를 저장하는 변수를 선언합니다.
# Yes로 초기화합니다.
all_is_prime = "Yes"

# 원래 전화번호가 소수인지 판별해봅니다.
# 2부터 origin_number_root까지 반복해봅니다.
for number in range(2, origin_number_root + 1):
    # origin_number가 현재 숫자에 나누어 떨어진다면
    if int(origin_number) % number == 0:
        # 소수가 아니므로 all_is_prime에 No를 저장합니다.
        all_is_prime = "No"

# 새로운 전화번호가 소수인지 판별해봅니다.
# 2부터 new_number_root까지 반복해봅니다.
for number in range(2, new_number_root + 1):
    # new_number가 현재 숫자에 나누어 떨어진다면
    if new_number % number == 0:
        # 소수가 아니므로 all_is_prime에 No를 저장합니다.
        all_is_prime = "No"

# all_is_prime에 저장된 값을 출력합니다.
print(all_is_prime)

결과

 

첫 번째로 제출했을 때는 원래 전화번호도 소수인지 판별해야 하는지 모르고

새로운 전화번호의 소수 여부만 판별하는 코드를 제출해버려 틀렸습니다 결과가 떴습니다.

 

두 번째 제출은 for문을 통한 소수를 판별할 때

origin_number_root = int(int(origin_number) ** 0.5) 대신 origin_number_half = int(origin_number) // 2를,

new_number_root = int(new_number ** 0.5) 대신 new_number_half = new_number // 2로 코드를 짜서

세 번째 제출보다 많이 느린 코드를 작성해버렸습니다.

답은 맞았지만 효율성 측면에서 좋지 않은 코드였습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글