JavaScript/알고리즘

프로그래머스 나머지가 1이 되는 수 찾기 JS

hihiha2 2023. 8. 23. 17:33

문제 설명

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

 

 

 

 

🙋‍♀️ 내 생각

나머지 1인 수를 일일이 검사를 해야 알 수 있기때문에, 반복문을 통해서 검사를 해야겠다고 생각했다.

나는 for문을 사용해서 수를 검사했다.

 

그리고 나머지가 1이 되는 수 중에서 가장 작은수를 찾아야하므로, 범위는 작은수를 기준으로 더해나가면서 검사를 하는 식으로 코드를 짰다.

(불필요하게 검사하는 값이 적어지도록 하기 위해서)

 

n을 나눈 나머지가 1인 수를 구하는 것이고 n의 범위가 3부터 시작되므로 찾으려는 값 x의 범위에서 0과 1은 제외했다.

 

 

 

 

✅ 내 코드

function solution(n) {
    
    for(x=2; x<n; x++){
        if(n%x===1){
            return x
        } 
      } 
    }

먼저 반복문을 돌면서 값을 일일이 검사하기 위해서, for문을 만든다.

 

for문의 범위2부터 시작하고 n보다 작을때까지 +1씩 반복하도록 만든다.

(0과 1은 불필요하게 검사할 필요는 없다.)

 

if문을 통해서 조건으로 n%x===1을 넣는다.

만약 조건을 만족하면 바로 x를 반환한다.

이렇게 앞에서 부터 검사하고 바로 반환하면, 자연스럽게 가장 작은 값이 반환된다.

 

바로 x가 반환되면 for루프가 종료되므로 쓸데 없는 값까지 다 검사하지 않는다.

 

 

 

 

🙋‍♀️ 내 생각

문제 자체는 어렵지 않았는데, 처음에 두번째 예시때문에 약간 헷갈렸다. 

 

"12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다."

 

따로 조건을 짜야했나? 했는데 생각해보면, 앞에서부터 하나하나 검사하면서 +1을 하기때문에 굳이 조건을 추가할 필요없이 검사하다가 일치하는 값이 없으면 자연스럽게 n-1이 x값이 된다. 

 

그래서 따로 더 추가할 건 없고, 저렇게만 검사하도록 코드를 만들면 된다.