본문 바로가기
Problem Solving/Programmers

Programmers - 나머지가 1이 되는 수 찾기[파이썬(python)]

by Deeppago 2022. 5. 29.

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/87389

 

코딩테스트 연습 - 나머지가 1이 되는 수 찾기

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 입

programmers.co.kr

문제 설명

자연수 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

댓글