나머지가 1이 되는 수 찾기(Javascript)

·2022년 9월 12일
0
post-thumbnail

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

제한사항

3 ≤ n ≤ 1,000,000
입출력 예

nresult
103
1211

입출력 예 설명

입출력 예 #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 증가시켜 준다. 따라서 반복문처럼 작동하게 된다.

profile
전 이것도 몰라요

0개의 댓글

관련 채용 정보