Coding test(Python3)/스터디

[DAY-23] 프로그래머스

녜잉 2024. 6. 26. 15:39

1. 문제 

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

 

제한사항

  • 3 ≤ n ≤ 1,000,000

 


 

2. 문제 풀이 방법

 

10 - 1 = 9

12 - 1 = 11

7 - 1 = 6

 

과 같이 n을 1로 나누었을 때 나오는 몫을 소인수 분해하면, n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 찾을 수 있는 것을 확인할 수 있다. 

 

1) n-1 값이 소수인지 확인한다.

2) 만약 n-1이 소수라면 바로 값을 return한다.

3) n-1이 소수가 아니라면 n-1의 약수를 구한 뒤 가장 작은 약수를 반환한다. 

 

def solution(n):
    answer = 0
    N = n-1
    divisor = []
    
    for i in range(2, N):
        if N % i == 0:
            divisor.append(i)
            answer = divisor[0]
            break
            
        else:
            answer = N
    return answer