barcode

백준 11653번 풀이

BOJ/[BOJ] Python

문제

https://www.acmicpc.net/problem/11653

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

주어진 수를 소인수분해하시오. (1이면 아무것도 출력 안 되게)

 

풀이

소인수분해는 합성수를 소수들의 곱으로 나타내는 것이다. 예를 들어 60을 소인수분해하면 2^2*3*5가 된다. 뭐 그런건데… 이 문제에서는 저렇게 제곱으로 나타낼 필요는 없고, 2 2 3 5 이런 순으로 출력하면 된다.

import sys
N = int(sys.stdin.readline().strip())
def isprime(a):
    if a < 2: 
        return False
    for i in range(2,a):
        if a % i == 0:
            return False
    else:
        return True
# 이거 근데 언제까지 써야됨...? 
for i in range(2,N+1):
    if N % i == 0 and isprime(i):
        while N % i == 0:
            print(i)
            N = N // i
    else: 
        pass

전체 코드. 여기서 중점적으로 볼 부분은 주석 밑에 부분이다.

for i in range(2,N+1):
    if N % i == 0 and isprime(i):
        while N % i == 0:
            print(i)
            N = N // i
    else: 
        pass

그러니까 여기.

 

for문과 그 아래에 있는 if는 N의 약수 중에서도 소수인 약수만을 골라내는 코드이고, 그 밑의 While문은 N을 i(위에서 찾은 소수인 약수)로 나누어서 나머지가 없을 동안, 그러니까 정확히 나눠 떨어질 동안 i를 계속 출력하면 된다.

 

참고로 else문에 있는 게 pass이기 때문에 별도의 처리가 없어도 1을 넣으면 아무것도 안 나온다.

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 4948번 풀이  (0) 2022.08.19
백준 1929번 풀이  (0) 2022.08.19
백준 2581번 풀이  (0) 2022.08.19
백준 1978번 풀이  (0) 2022.08.18
백준 1011번 풀이  (0) 2022.08.18