백준 2777번 숫자 놀이

이호영·2021년 11월 5일
0

백준

목록 보기
2/3

백준 숫자 놀이

숫자 놀이 알고리즘

ver.1
숫자 N의 약수들을 이용해서 가장 작은 자연수를 만들고 그 자리수를 출력
한 자리 소수인 2,3,5,7의 곱으로 나타내야 함
11 이상의 소수의 배수라면 -1을 출력해야함
N을 유지한 채로 N값을 사용하기 위해 temp 변수 사용
2,3,5,7로 나눠지면 temp을 2,3,5,7로 나누고 같은 과정 반복
while 문을 통해서 2,3,5,7로 나눠지지 않을 때 탈출하게 함
나눠진 수들을 리스트 x에 삽입한다.

ver.2
20 입력시 2,2,5가 나오는데
225보다는 45가 더 작은 수
한 자리 수 나오면 더 안 나누도록 하게 해야 함
temp % 10 == temp 일때 while문 탈출

ver.3
x에 1.0이 추가가 되는데 1.0이 추가가 안되도록 조건문을 설정함
2.0, 8.0 등 소수점이 추가가 됨
4,8의 배수도 있는데 2로 먼저 나눠져서 4,8이 추가가 잘 안됨
8,4로 나누고 안 나눠지는 것을 2로 나누게 한다.
동일한 문제가 6,9에서도 발생 가능

ver.4
자연수와 소수의 곱셈으로 나눠짐, -1 출력하는 부분 아직 구현하지 않음
검색해서 다른 분들 코드 참조

ver.5
9부터 2까지 순서대로 나눠보는 게 좋은 것 같다.
10이상의 소수로 나눠질 경우 -1을 출력
그 이외에는 리스트 x에 더해진 요소 숫자를 출력하게 함

denom = [i for i in range(9,1,-1)]
results = []

T = int(input())
for _ in range(T):
    x = []
    N = int(input())
    temp = N
    while (1):
        cnt = 0
        if temp == 1:
            x.append(1)
            break
        for num in denom:
            if temp % num == 0:
                x.append(num)
                temp /= num
                break
            cnt +=1
        if cnt == 8:
            if temp >=10:
                break
        if temp ==1:
            break
    if cnt ==8:
        results.append(-1)
    else:
        results.append(len(x))

for idx in range(len(results)):
    print(results[idx])
profile
Speech Synthesis & Voice Cloning

0개의 댓글