[python_파이썬]백준_11653번_소인수분해_풀이
2024. 4. 25. 12:28ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/JKVbtCm4CSM?feature=shared
일단 문제를 접했을때 쉬운 소수판별은 아닌거 같아서 노트에 필기를 시작했다.
1. 주어진 정수의 소인수들을 구한다.
ㄴ 약수를 구한다.
ㄴ 약수중에 소수의 숫자들만 별도로 리스트로 만든다.
2. 그 소인수들중에서 작은 수부터 계속 나눠서 마지막 정수가 1이 나올때까지 반복한다.
ㄴ 여기 반복이 조금 헷갈렸지만 for문을 먼저 두고 소인수의 요소를 차례로 뽑아낸다
ㄴ 첫번째 요소로 나눌때 나머지가 0이 될때마다 출력한다.
ㄴ 두번째 요소로 나눌때 나머지가 0이 될때마다 출력한다.
<첫번째 작성 코드>
import sys
input = sys.stdin.readline
def isprime(N):
if N <= 1:
return False
for i in range(2, int(N ** 0.5) + 1):
if N % i == 0:
return False
return True
A = int(input())
answer = []
if A > 1:
for i in range(2, A + 1):
if A % i == 0 and isprime(i):
answer.append(i)
for i in range(len(answer)):
while A % answer[i] == 0:
print(answer[i])
A //= answer[i]
일단 이렇게 어렵게? 풀었다. 이제 소수 관련 개념은 어느정도 잡힌 듯 하다.
<라이브러리 sympy사용_런타임에러_코테에는 사용 불가>
import sys
input = sys.stdin.readline
from sympy import isprime
A = int(input())
answer = []
if A > 1:
for i in range(2, A + 1):
if A % i == 0 and isprime(i):
answer.append(i)
for i in range(len(answer)):
while A % answer[i] == 0:
print(answer[i])
A //= answer[i]
<다른 사람 코드 분석>
이 코드 신기하네.
1. i = 1일때 아무 동작 안하고, 2와 3일때 그냥 하나씩 출력하게 설계 => 5일때도
2. 이제 N은 4보다 크거나 같음 => 이걸 i * i로 표현해서 i = 2부터 시작
ㄴ i * i 조건은 정수 N의 제곱근보다 작거나 같아야 한다? -> 이게 조금 이해가 안가네.
일단 기억하고 pass
N = int(input())
i = 2
while i * i <= N:
while N % i == 0:
print(i)
N //= i
i += 1
if N > 1:
print(N)
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬_pass]백준_15894번_수학은 체육과목 입니다_풀이 (0) | 2024.04.26 |
---|---|
[python_파이썬]백준_3009번_네 번째 점_풀이 (1) | 2024.04.25 |
[python_파이썬]백준_1978번/2581번_소수 관련_풀이 (0) | 2024.04.24 |
[python_파이썬]백준_2501번_약수구하기_풀이 (0) | 2024.04.24 |
[python_파이썬]백준_1193번_분수찾기_풀이 (2) | 2024.04.23 |