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
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 1209. Sum - Python (0) | 2022.02.19 |
---|---|
[SWEA] 1208. Flatten - Python (0) | 2022.02.19 |
[SWEA] 5789. 현주의 상자 바꾸기 - Python (0) | 2022.02.18 |
[SWEA] 6485. 삼성시의 버스 노선 - Python (0) | 2022.02.18 |
[SWEA] 4835. 구간합 - Python (1) | 2022.02.17 |
댓글