https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pl0Q6ANQDFAUq
숫자 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부터 시작한다.)
입력
10
6791400
1646400
1425600
8575
185625
6480
1185408
6561
25
330750
출력
#1 3 2 2 3 1
#2 6 1 2 3 0
#3 6 4 2 0 1
#4 0 0 2 3 0
#5 0 3 4 0 1
#6 4 4 1 0 0
#7 7 3 0 3 0
#8 0 8 0 0 0
#9 0 0 2 0 0
#10 1 3 3 2 0
def facto(n): # 소인수분해
res = {2:0, 3:0, 5:0, 7:0, 11:0}
d = 2
while d <= n: # 약수가 n이하일때까지
# 숫자가 18이면 2로 한 번 나누고 3으로 두 번 나눔
# 숫자가 20이면 2로 두 번 나누고 5로 한 번 나눔
if n % d == 0: # 현재 약수로 나눠지면
res[d]+=1 # 현재 약수 추가
n /= d # 숫자 나누기
else:
d += 1 # 약수 증가 (4로 나누어질 염려를 안해도 되는게, d가 2일 때 나눗셈 끝남)
return res
t = int(input())
for i in range(t):
print(f"#{i+1}", end=' ')
num_facto = facto(int(input()))
print(*num_facto.values())
facto
부분은 소인수분해(Factorization)파트로 주석을 보면 이해할 수 있다.
res
는 사실 그러면 안되긴 한데 문제에서 소인수를 11까지만 주었으므로 소인수를 카운트하는 res
에도 11까지만 담기도록 했다ㅎ
아니 SWEA를 오늘 d1부터 쭉 풀고있는데 어째 내가 풀기만 하면 실행시간이 길게 나온다...
d1 풀 때 어떤 분은 엄청 짧고 빠르게 잘하셨길래 코드 보고 그대로 복붙해서 실행했더니 내껀 100ms대임ㅠ stop 억까!!!❗❗❗🚫🚫🚫