Python_알고리즘/Silver III

2312. [Python]수 복원하기

최근영 2023. 6. 4. 22:22

1. 문제

 

https://www.acmicpc.net/problem/2312

 

2312번: 수 복원하기

첫째 줄에 테스트 케이스의 수가 주어진다. 각 테스트 케이스마다 양의 정수 N (2 ≤ N ≤ 100,000)이 주어진다.

www.acmicpc.net

 

2. 접근 방법

 

  • 시간 제한: 2초
  • 메모리 제한: 128MB
  • 정수론

 

3. 파이썬 코드

 

# 테스트 케이스 갯수
N = int(input())
# 갯수만큼 반복문 시행
for _ in range(N):
    # 소인수 분해할 수
    number = int(input())
    # 각각 몇개가 들어있는지 체크할 딕셔너리
    num_dict = {}
    # 시작값 2부터
    check = 2
    # input으로 들어온 값이 1보다 큰경우 계속 반복문
    while number>1:
        # 만약 check로 나누어 떨어질 경우
        if number%check == 0:
            # 딕셔너리에 값이 있는지 확인하고 없으면 추가 있으면 1 증가
            if check in num_dict:
                num_dict[check] += 1
            else:
                num_dict[check] = 1
            # number 값을 check로 나눈 몫을 다시 넣어줌
            number //= check
        # 나누어 떨어지지 않을 경우 check 값을 1증가
        else:
            check += 1
    for k,v in num_dict.items():
        print(k,v)

 

4. 문제를 풀고난 후 생각

 

  • 그냥 들어온 숫자를 가지고 계속해서 나눠가며 딕셔너리를 통해서 문제를 해결하는 방식을 채용했다.
  • N값으로 들어오는 수의 범위가 크지않고 적당한 수의 범위였기 때문에 딕셔너리와 반복문을 통해서 값을 눠가며 나누어 떨어지지 않는 경우 값을 +1 해주는 방식으로 input 값을 계속해서 나눠가며 갯수를 체크해줬다.

 

5. 문제를 푸는데 도움이 되는 지식

 

  • 정수론