알고리즘/알고리즘_swea

[Python][SWEA] 1945. 간단한 소인수분해 D2

Jerry_K 2024. 5. 8. 16:15
 

SW Expert Academy

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

swexpertacademy.com


🗒️ 파이썬 코드 풀이

T = int(input())
for test_case in range(1, T + 1):
    N = int(input())
    lst = [2,3,5,7,11]
    cnts = [0] * 5
    for i in range(5) :
        while N % lst[i]  == 0 :
            cnts[i] += 1
            N = N / lst[i]
    print(f"#{test_case} {' '.join(list(map(str,cnts)))}")

 

1. 소인수 리스트와 카운트를 해줄 리스트를 만들어준다.

 

2. 소인수 리스트들을 반복문과 while문으로 돌려 지수의 개수를 찾아준다.

 

📌 내가 작성한 코드

T = int(input())
for test_case in range(1, T + 1):
    N = int(input())

    dic = {
        2 : 0,
        3 : 0,
        5 : 0,
        7 : 0,
        11 : 0
    }
    lst = [2,3,5,7,11]

    while lst :
        if N % lst[0] == 0 :
            dic[lst[0]] += 1
            N = N/lst[0]
        else :
            lst.pop(0)
    ans = list(dic.values())
    print(f"#{test_case} {' '.join(list(map(str,ans)))}")

 

간단한 문제이다... 굳이 내가 작성한 것 처럼 안해도 된다.

내 풀이는 리스트와 딕셔너리를 각각 만들고, 리스트가 None이 될때까지 while문을 돌리는 것이다.

더 이상 필요없는 값은 다음 카운트를 위하여 pop을 한다.

 

문제를 풀 때 0행렬을 이용해서 푸는 것을 기피하는 것 같다.

오히려 저렇게 하는게 훨씬 더 쉬우니 다음에는 0행렬로 풀어보자 !!

 

참고로 두 코드 메모리와 실행시간에서 큰 차이는 없다.


📚 문제

숫자 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부터 시작한다.)