T = int(input())
for tc in range(1, T+1):
# 입력으로 받은 N을
N = int(input())
# 소인수 리스트를 만들어서
num = [2, 3, 5, 7, 11]
# 나눠진 횟수를 담기위한 빈 리스트 생성
count = [0, 0, 0, 0, 0]
# 리스트 num을 돌면서(range로 한 이유는 같은 인덱스에 count리스트에도 횟수를 추가해주기 위해서)
for n in range(len(num)):
# 무한루프를 주고
while True:
# 만약 N이 num의 n번째 숫자로 나눈 나머지가 0이라면
if N % num[n] == 0:
# N은 그 숫자로 나눈 몫으로 바꾸고
N = N//num[n]
# count리스트의 같은 인덱스에 값을 +1해줌
count[n] += 1
# 나눈 나머지가 0이 아니라면 멈추고 num의 다음 인덱스로 넘어감.
else:
break
# 리스트컴프리핸션을 이용한 출력
# print('#{}'.format(tc),' '.join([str(_) for _ in count]))
# map함수는 str을 count의 모든항목에 적용
print('#{}'.format(tc), ' '.join(map(str, count)))
🔑 문제이름이 '간단한 소인수 분해'인데 누구한테 간단하다는건지 모르겠지만 일단 저는 아닙니다...ㅎ
while
문을 사용하고 싶어서 소인수리스트와 소인수로 몇번 나누어 졌는지 체크할 count리스트를 소인수 리스트와 같은 크기로 만든 뒤에 리스트의 인덱스가 중요해서 for
문에 리스트의 길이를 주었다.while
문을 쓴 이유는 내가 while
을 잘 못쓰고 있는것 같아 나중에 자유자재로 사용하기 위해 요즘 못하더라도 자꾸 쓰려고 노력중이다!' '
을 준 이유는 출력이 한칸씩 떨어져서 출력되어야 하므로 빈칸단위로 나누기 위해서 써주었다.