문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/87389
문제 설명
자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.
제한사항
- 3 ≤ n ≤ 1,000,000
입출력 예
n | result |
10 | 3 |
12 | 11 |
입출력 예 설명
입출력 예 #1
- 10을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.
입출력 예 #2
- 12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다.
문제 풀이
n을 나눠서 나머지가 1이 되는 최솟값을 찾는 간단한 문제이다.
n을 나눠서 나머지가 1이 되는 최대값은 n-1이다.
그렇다면 최소값은 어떻게 찾을 수 있을까?
1 이외의 n-1의 약수중 최솟값을 찾으면 된다.
이때 n-1이 소수인 경우가 있으므로 n-1이 소수가 된다면 그대로 n-1을 반환하여 답을 구할 수 있다.
구현 코드
코드 링크 : 나머지가 1이 되는 수 찾기
import math
def get_minimum_divisor(x):
#2부터 x의 제곱근까지의 모든 수를 확인하며
for i in range(2, int(math.sqrt(x))+1):
#x가 해당 수로 나누어 떨어진다면
if x % i == 0:
return i # 해당 수를 return
return x # 소수이므로 입력된 수를 return
def solution(n):
answer = get_minimum_divisor(n-1)
return answer
'Problem Solving > Programmers' 카테고리의 다른 글
Programmers - 최솟값 만들기[파이썬(python)] (0) | 2022.05.23 |
---|---|
Programmers - 숫자의 표현[파이썬(python)] (0) | 2022.05.22 |
Programmers - 소수 만들기[파이썬(python)] (0) | 2022.05.12 |
Programmers - 다음 큰 숫자[파이썬(python)] (0) | 2022.05.07 |
Programmers - 방문 길이[파이썬(python)] (0) | 2022.05.05 |
댓글