Algorithm Study/Python

[백준 파이썬] #11653 소인수분해

728x90
반응형

Siver IV

# 11653 소인수분해

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

 

11653번: 소인수분해

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

www.acmicpc.net

 

내 풀이 방식

주어진 N값을 소수로 나누었을 때 구할 수 있는 약수를, 다시 소수로 나누는 과정을 반복하면 구할 수 있을 것이라 생각했지만, 코드구현에 실패했다.

 

다른 풀이 코드 리뷰

- while문 활용 (스터디원)

n = int(input())
d = 2
while n != 1:
    if n%d == 0:
        n = n // d
        print(d)
    else:
        d+=1
  • 생각보다 간단하고 깔끔하게 코드 구현을 잘 했다.
  • 재귀적 풀이가 어려울 때 while문과 조건을 이용해서 시도해볼 수 있을 것이다.

- 재귀 함수 풀이(by_mentor)

def get_factor(x):
    for i in range(2, x+1):
        share, remainder = x//i, x%i  
        if remainder == 0:
            return share, int(x/share)
    return 1, x  # 질문 : 1, x를 반환?

N = int(input())

if N == 1:
    pass
else:
    factors = []

    while N != 1:
        N, factor = get_factor(N)
        factors.append(factor)

       for f in factors:
        print(f)
  • def로 함수를 정의해서 풀이하는 방식이다. 문제 의도에는 보다 적합한 풀이라고 생각한다.
  • 재귀함수를 구성하는 방식에 대해 익숙해질 필요가 있다.
  • 다 이해 하지 못했었도 보고 익히도록 하자