[SW Academy] 1945. 간단한 소인수분해

DreamJJW·2023년 5월 23일
0

SW Academy

목록 보기
10/26

📖 문제

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

숫자 N은 아래와 같다.

N=2a x 3b x 5c x 7d x 11e

N이 주어질 때 a, b, c, d, e 를 출력하라.

[제약 사항]

N은 2 이상 10,000,000 이하이다.

[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에 N 이 주어진다.

[출력]

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)



📖 풀이

소인수분해 문제이다.
2부터 시작해서 계속해서 나누어주어 몫을 카운트하고,
2로 나누어지지 않는다면 다음 소수인 3으로 나누기 시작하고...
7..11.. 이렇게 진행된다.

해당 문제에서는 소수를 따로 판별할 필요 없이
2, 3, 7, 9, 11만 사용하므로 따로 리스트를 만들어주었다.

개인적으로 문제풀이보다 출력방식 때문에 굉장히 헤맨 문제이다..
SW Academy 출력 방식에 좀 더 익숙해질 필요가 있을듯 하다.


T = int(input())
nums = [2, 3, 5, 7, 11]
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    temp = {2: 0, 3: 0, 5: 0, 7: 0, 11: 0} # [2^a, 3^b, 5^c, 7^d, 11^e] 카운트
    N = int(input())
    for i in nums:
        while True:
            if N % i == 0: # 0으로 나누어 떨어진다면, 
                N = N // i # 나눈다.
                temp[i] += 1
            else:
                break

    print("#{0} {1} {2} {3} {4} {5}".format(test_case, list(temp.values())[0],
                                            list(temp.values())[1], list(temp.values())[2],
                                            list(temp.values())[3], list(temp.values())[4],))
profile
간절한 사람

0개의 댓글