본문 바로가기
TIL - 프로그래밍/Python 알고리즘

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

by chaemj97 2022. 2. 18.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pl0Q6ANQDFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 

< 📝 문제 >

숫자 N은 아래와 같다.

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

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


< ❓ 생각 >

1.

i(밑)으로 나누어서 나머지가 0이면 해당 밑의 지수에 1 추가 + N을 i으로 나누기

반복해서 N이 1일 때까지

2.

i(밑)으로 나누어서 나머지가 0이면 해당 밑의 지수에 1 추가 + N을 i으로 나누기

더이상 i로 나누어지지 않을 때 다음 밑으로 바꿔서 반복


< 💻 코드 >

1.

# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
    # 소인수분해할 숫자
    N = int(input())
    
    # i로 나누었을 때 나머지가 0이라면 지수 1 추가 + N을 i로 나누기
    # N이 1일때까지 반복
    result = [0]*5
    while N != 1:
        if N%2 == 0:
            N = N/2
            result[0] += 1
        if N%3 == 0:
            N = N/3
            result[1] += 1
        if N%5 == 0:
            N = N/5
            result[2] += 1
        if N%7 == 0:
            N = N/7
            result[3] += 1
        if N%11 == 0:
            N = N/11
            result[4] += 1

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

2.

# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
    # 소인수분해할 숫자
    N = int(input())
    
    # 밑
    lst = [2,3,5,7,11]
    cnt =[0]*5
    # i(밑)으로 나누었을 때 나머지가 0이면 지수 1 추가 + N으로 나누기
    # i로 나누어지지 않을 때까지 
    for i in range(5):
        while N % lst[i] == 0:
            cnt[i] += 1
            N //= lst[i]
    print(f'#{tc}', *cnt)


< ❗ >

반복문을 잘 활용하여 코드의 길이를 줄이자!

728x90
반응형

댓글