일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 프로그래밍 입문 문제풀이
- php 프로그래밍 입문 예제
- 자바 스프링
- 페이코 친구코드
- 한정 분기
- C
- programmers
- Java
- 파이썬
- Flutter
- 페이코 추천인
- spring
- 페이코 추천인코드
- php 프로그래밍 입문 3판
- 플러터
- php 프로그래밍 입문
- 자바
- php
- 백준
- JAVA SPRING
- php 프로그래밍
- 페이코 초대코드
- php 프로그래밍 입문 연습문제
- C언어
- SWEA
- 스프링
- Today
- Total
ImJay
[파이썬/Python] 백준 1747번 소수&팰린드롬 본문
[파이썬/Python] 백준 1747번 소수&팰린드롬
1747번: 소수&팰린드롬
어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,
www.acmicpc.net
문제
어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.
어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.
해설
문제에서 요구하는 사항
1. N의 범위 (1 ≤ N ≤ 1,000,000)
2. 결과 값은 N보다 크거나 같아야 한다.
3. 결과 값은 소수여야 한다.
[알고리즘] 소수 판별법 (Primality Test)
효율적인 소수 판별법에 대해 알아보자.
curt-park.github.io
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은 소수가 아니므로 예외처리를 해주어야 한다.
소수를 구하는 알고리즘의 자세한 내용은 아래 링크를 참고하자.
[알고리즘] 소수 판별법 (Primality Test)
효율적인 소수 판별법에 대해 알아보자.
curt-park.github.io
def isPalindrome(x):
if str(x) == str(x)[::-1]:
return True
return False
2. 팰린드롬 수를 구하는 함수이다. 팰린드롬 수를 구하는 방법은 리스트 슬라이싱에서 아이디어를 얻을 수 있었다.
원래 수와 이를 역순으로 나타낸 수가 서로 일치할 경우 True를 반환하여 팰린드롬 수임을 판별하였다.
리스트 슬라이싱의 자세한 내용은 아래 링크를 참고하자.
11. 파이썬 리스트 슬라이싱 활용하기 - Codetorial
예제 my_list = [1, 2, 3, 4, 5, 6, 7, 8] print(my_list[1::2]) print(my_list[1::3]) print(my_list[2:6:2]) [2, 4, 6, 8] [2, 5, 8] [3, 5] my_list[1::2]은 리스트의 인덱스 1의 위치에서 끝까지 간격 2 단위로 슬라이싱합니다. my_list[1:
codetorial.net
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 |