# 3. APS/SWEA

SWEA # Python_D2_1945_간단한 소인수분해 (while문)

둥굴둥굴둥굴레차 2021. 2. 15. 21:36

 

 

🎨 [문제]

 

N=2a x 3b x 5c x 7d x 11e
N이 주어질 때 a, b, c, d, e 를 출력하라.

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

[input]
10  
6791400
1646400
1425600
8575
185625
6480
1185408
6561
25
330750

[output]
#1 3 2 2 3 1
#2 6 1 2 3 0
#3 6 4 2 0 1
#4 0 0 2 3 0
#5 0 3 4 0 1
#6 4 4 1 0 0
#7 7 3 0 3 0
#8 0 8 0 0 0
#9 0 0 2 0 0
#10 1 3 3 2 0
[풀이 1]
import sys
sys.stdin = open("input.txt")

T = int(input())

for tc in range(1, T+1):
    N=int(input())
    num_list=[2, 3, 5, 7, 11]
    result=[0, 0, 0, 0, 0]
	# N을 2, 3, 5, 7, 11로 나누었을 때 나머지(%)가 0이면 소인수!
    for i in range(len(num_list)):
        while N%num_list[i] == 0:
            N = N // num_list[i]
            # 나머지가 0이면 1을 올려줌
            result[i]+=1

    # ''.join을 하면 list에서 str으로 바꿔준다.
    print("#{} {}".format(tc, ''.join(map(str,result))))

[풀이 2]
import sys
sys.stdin = open("input.txt")

T = int(input())

for tc in range(1, T+1):
    N = int(input())
    nums = [2, 3, 5, 7, 11]
    new_list = []

    for i in nums:
        cnt = 1
        while True:
            if N%i != 0:
                break

            N = N//i
            cnt += 1

        cnt -= 1

        new_list += [str(cnt)]
 
    print("#{} {}".format(tc,' '.join(new_list)))

 


 

🍦 [복습]

 

# 1. 210225

while문은..너무 어렵다..

그리고 여전히 처음 보는 유형의 문제를 접했을 때

어떻게 다가가야할지 잘 모르겠다..

오늘도 난 운다...^^

 

# 2. 210301

숫자를 i로 나누어주었을 때 나머지가 0이 아닌 값으로 나오면 i로 나눌 수 있는 최대로 나누었다는 뜻. 

더이상 i로 나눌 수 없기 때문에 다음 i값으로 나누어주어야 한다.

 

17, 11, 3 등은 소수이다. 약수가 자기자신과 1밖에 없는 자연수.

 

# 3. 210307

갑자기 위의 풀이 2 방식으로 풀어버렸다.

갑자기 잘되네..

나만의 방식으로 푸니까 잘 풀리는 것 같다.

 

#4. 2103011

# join은 문자열만 가능. 리스트에서 join해주려면 요소들이 str값이어야 한다.
# 아니면 map해주던가