일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- php 프로그래밍 입문
- php
- 자바 스프링
- 페이코 추천인
- 페이코 초대코드
- programmers
- spring
- php 프로그래밍 입문 3판
- 플러터
- 한정 분기
- 페이코 친구코드
- php 프로그래밍 입문 연습문제
- C언어
- 플러터 개발환경 설정
- 최단 경로
- C
- 자바
- 파이썬
- 백준
- Flutter
- php 프로그래밍
- SWEA
- 배열
- JAVA SPRING
- php 프로그래밍 입문 솔루션
- php 프로그래밍 입문 문제풀이
- 스프링
- php 프로그래밍 입문 예제
- 페이코 추천인코드
- Java
- Today
- Total
ImJay
[파이썬/Python] 백준 1747번 소수&팰린드롬 본문
[파이썬/Python] 백준 1747번 소수&팰린드롬
문제
어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.
어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.
해설
문제에서 요구하는 사항
1. N의 범위 (1 ≤ N ≤ 1,000,000)
2. 결과 값은 N보다 크거나 같아야 한다.
3. 결과 값은 소수여야 한다.
4. 결과 값은 팰린드롬인 수 중에서 가장 작은 수여야 한다.
코드
import math
def isPrime(x):
if x == 1:
return False
for i in range(2, int(math.sqrt(x)+1)):
if x % i == 0:
return False
return True
def isPalindrome(x):
if str(x) == str(x)[::-1]:
return True
return False
N = int(input())
while True:
if isPrime(N) and isPalindrome(N):
print(N)
break
N += 1
풀이
import math
def isPrime(x):
if x == 1:
return False
for i in range(2, int(math.sqrt(x)+1)):
if x % i == 0:
return False
return True
1. 소수를 구하는 함수 isPrime이다. 1은 소수가 아니므로 예외처리를 해주어야 한다.
소수를 구하는 알고리즘의 자세한 내용은 아래 링크를 참고하자.
def isPalindrome(x):
if str(x) == str(x)[::-1]:
return True
return False
2. 팰린드롬 수를 구하는 함수이다. 팰린드롬 수를 구하는 방법은 리스트 슬라이싱에서 아이디어를 얻을 수 있었다.
원래 수와 이를 역순으로 나타낸 수가 서로 일치할 경우 True를 반환하여 팰린드롬 수임을 판별하였다.
리스트 슬라이싱의 자세한 내용은 아래 링크를 참고하자.
N = int(input())
while True:
if isPrime(N) and isPalindrome(N):
print(N)
break
N += 1
3. N을 입력받아 무한루프를 통해 소수이면서 동시에 팰린드롬 수인 경우 N을 출력하였다.
둘 중 하나라도 해당하지 않을 경우 N을 증가시켜 문제 조건에 해당하는 수를 찾는다.
피드백
내 코드는 지나치게 실행 시간이 느렸다.
다른 사람들 중 파이썬으로 푼 사람들의 채점 현황과 실행 시간을 비교해보았는데,
가장 큰 특징은 나와 같이 실행 시간이 큰 사람들의 공통점은 isPalindrome(x) 즉 팰린드롬 수를 판별하는 메소드를 따로 선언해주었다는 점이다.
소수를 판별하는 메소드는 큰 차이를 발생시키지 않는 것 같은데, 메소드를 호출하고 문자열로 형변환하는 과정이 실행시간에 큰 영향을 미치는걸까?
'백준 - 문제집 > 대학생 기본반' 카테고리의 다른 글
[파이썬/Python] 백준 8979번 올림픽 (0) | 2023.01.16 |
---|---|
[파이썬/Python] 백준 2816번 디지털 티비 (0) | 2023.01.16 |
[파이썬/Python] 백준 2621번 카드게임 (0) | 2023.01.09 |
[파이썬/Python] 백준 1652번 누울 자리를 찾아라 (0) | 2022.12.22 |
[파이썬/Python] 백준 대학생 기본반 (0) | 2022.12.21 |