Stay Hungry Stay Foolish

SWEA

[SWEA] 1945. 소인수분해 (Python/D2)

dev스카이 2024. 10. 16. 18:34

[문제 링크] 👉 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pl0Q6ANQDFAUq


설명

숫자 N은 아래와 같다.


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

 

풀이

sol.1

 

a, b, c, d, e를 담을 배열을 생성한다.

index = [0]*5

 

 

숫자가 1이 될 때까지 즉, 다 나눠질 때까지 반복한다. 

while num > 1:
    if num % 2 == 0:
        num //= 2
        index[0] += 1
    elif num % 3 == 0:
    	num //= 3
        index[1] += 1
    ...
  • 2로 나눈 나머지가 0일 때(2로 나눠질 때) 몫을 num에 저장한다.
  • 첫 번째 인덱스에 1을 증가시킨다.
  • 2로 나뉘어지지 않으면 3으로 나뉘어지는지 확인한다.
  • 3으로 나뉘어지면 몫을 num에 저장하고, 두 번째 인덱스에 1을 증가시킨다.
  • 이렇게 11까지 확인하고, 더 이상 나뉘어지지 않을 때까지 반복한다.

 

sol.2

 

배열에 나눌 값을 미리 저장한다. 그리고 결과를 담을 리스트도 생성한다.

index = [2, 3, 5, 7, 11]
result = [0]*5

 

 

위에서 생성한 리스트를 활용

for i in range(5):
    while num % index[i] == 0:
        result[i] += 1
        num //= index[i]
  • 먼저, 첫 번째 인덱스, 숫자가 2로 나뉘어질 때까지 반복한다.
  • 나뉘지면 result 첫 번쩨 인덱스에 1을 증가하고, 2로 나눈 몫을 num에 다시 저장한다.
  • 그 다음 인덱스, 숫자가 3으로 나뉘어질 때까지 반복한다.
  • 나뉘지면 result 두 번쩨 인덱스에 1을 증가하고, 3으로 나눈 몫을 num에 다시 저장한다.
  • 이렇게 마지막 인덱스까지 확인한다.

 

 

Solution

sol.1

test_case = int(input())
for t in range(1, test_case + 1):
    num = int(input())
    index = [0]*5
    while num > 1:
        if num % 2 == 0:
            num //= 2
            index[0] += 1
        elif num % 3 == 0:
            num //= 3
            index[1] += 1
        elif num % 5 == 0:
            num //= 5
            index[2] += 1
        elif num % 7 == 0:
            num //= 7
            index[3] += 1
        elif num % 11 == 0:
            num //= 11
            index[4] += 1

    print("#%d" %t, end=' ')
    for i in index:
        print(i, end=' ')
    print()

 

 

sol.2

test_case = int(input())
for t in range(1, test_case + 1):
    num = int(input())
    index = [2, 3, 5, 7, 11]
    result = [0]*5
    for i in range(5):
        while num % index[i] == 0:
            result[i] += 1
            num //= index[i]
    print(f'#{t}', *result)

 

 

👩‍💻 회고

출력할 때 출력 형식을 좀 더 활용하자.

print(f'#{t}', *result)