자연수 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 해야 합니다.
반복문을 이용해야 하는 문제이다. 나는 for문을 이용해서 풀어주었다.
for문을 다시 정리하자면, for(초기문;조건문;증감문) 순으로 적어 줘야 한다. if가 true일 때의 결과값은 블록으로 묶어주지 않아도 동작한다.
x가 자연수여야 n을 나눠줄 수 있으므로 x는 1부터 시작, n까지 반복해준다. 도중에 나머지가 1이 된다면(if문이 true라면), x를 인출해 준다. 작은 값부터 반복을 시작했으므로 가장 작은 자연수 x가 인출된다.
function solution(n){
for(let x= 1; x < n; x++){
if (n % x === 1)
return x;
}
}
function solution(n, x = 0) {
return n % x === 1 ? x : solution(n, x + 1);
}
이 풀이가 위의 식보다 간략하게 표현되어 가져 왔다. 조건 ? A : B
는 조건이 참이라면 A, 거짓이라면 B를 인출한다. 위 식에는 참이라면 x를 인출하고 거짓이라면 solution(n, x+1)을 인출한다. x가 0부터 시작해서 n/x의 나머지가 1이 아니라면 solution함수로 되돌아가서 x의 수를 1 증가시켜 준다. 따라서 반복문처럼 작동하게 된다.