문제) 백준 - 수학 - 수
https://www.acmicpc.net/problem/22943
22943번: 수
0부터 9까지 $K$가지의 숫자를 한 번씩만 사용하여 만들 수 있는 수 중 아래 조건을 모두 만족하는 수들의 개수를 구해보자. 단, 수의 맨 앞에는 0이 올 수 없다. 즉, 0143는 불가능하다. 서로 다른
www.acmicpc.net
소수 판별을 이용해 다양한 조건을 만족하는 수의 개수를 찾는 문제였습니다. 0부터 9까지 K개로 이루어진 수를 찾기 위해 itertools에 내장된 permutation을 활용했습니다. 만약 뽑힌 수의 앞 수가 0일 경우 만족하지 않으므로 무시합니다. 그 후, 에라토스테네스의 체를 활용한 소수 판별을 바탕으로 문제에 주어진 조건대로 확인합니다.
Python 소스코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
isPrime = [True] * MAX | |
def makePrime(): | |
isPrime[0] = False | |
isPrime[1] = False | |
isPrime[2] = True | |
for i in range(int(math.sqrt(MAX)) + 1): | |
if isPrime[i]: | |
for j in range(i*i, MAX, i): | |
isPrime[j] = False | |
def dd(num, k): | |
if num < k: return num | |
while 1: | |
if(num % k != 0): return num | |
num //= k | |
return num | |
def cond1(n): | |
for i in range(2, n // 2 + 1): | |
if i != n - i and isPrime[i] and isPrime[n - i]: | |
return True | |
return False | |
def cond2(n, k): | |
n = dd(n, k) | |
for i in range(2, int(math.sqrt(n)) + 1): | |
if n % i == 0 and isPrime[i] and isPrime[n // i]: | |
return True | |
return False |
Full Code)
https://github.com/Chocochip101/BOJ_Solution/blob/main/Solution/22943_%EC%88%98.py
GitHub - Chocochip101/BOJ_Solution: BOJ Solutions
BOJ Solutions. Contribute to Chocochip101/BOJ_Solution development by creating an account on GitHub.
github.com
반응형
'PS(Problem Solving) > 백준_BOJ' 카테고리의 다른 글
[백준] 14430번 - 자원 캐기 (C++) 문제 및 풀이 (0) | 2022.03.04 |
---|---|
[백준] 9996번 - 한국이 그리울 땐 서버에 접속하지 (Python) 문제 및 풀이 (0) | 2022.03.03 |
[백준] 18405번 - 경제적 전염 (C++) 문제 및 풀이 (0) | 2022.03.02 |
[백준] 17609번 - 회문 (C++) 문제 및 풀이 (0) | 2022.03.01 |
[백준] 20162번 - 간식 파티 (C++) 문제 및 풀이 (0) | 2022.03.01 |
댓글