코딩/프로그래머스 코딩테스트

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

민쯔 2021. 11. 20. 23:47
728x90
반응형

안녕하세요. 민쯔입니다.😊
이번에는 "나머지가 1이 되는 수 찾기" 문제를 풀어보았는데요.
이번 문제는 해결방안을 설명하기도 부끄러울 정도로 쉬운 문제라...ㅋㅋ 해결방안 쓰기도 머쓱하네요.

그럼 "나머지가 1이 되는 수 찾기"해결방안에 대해 설명해보겠습니다.

function solution(n) {
    for(let i=0; i<n; i++){
        if(n % i === 1) return i;
    }
}

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

여기서 노랑색으로 밑줄 친 부분이 중요해요.

  • "n을 x로 나눈 나머지가 1" -> "n % x === 1"
  • "가장 작은 자연수 x를 return" -> "나머지가 1이 되는 자연수를 다 구할 필요가 없다." 

이제 여기서 나온 두 문장을 활용하여 코드를 작성해보겠습니다.

 

이번에도 역시 for문을 사용해서 풀었는데
나머지 값이 1이 나오려면 자연수 n 보다 큰 수를 나눌 필요가 없고,
n보다 작은 수로 나누어야 나머지 값이 1이상의 숫자가 나오겠죠?
그래서 for문을 작성할 때 "i < n"으로 했습니다.

  • for(let i=0; i<n; i++)

여기서 "i=0"으로 쓰는게 중요한데 이렇게 안 쓰면 통과 못해요!!!!!
제가 제한사항에서 "3 ≤ n ≤ 1,000,000"이라서 i=3으로 했다가 제출 후 채점하기에서 테스트 4, 5번이 실패 떠서 통과 못했었거든요.😂

 

이제 가장 작은 자연수를 구해야되는데
이거는 단순하게 if문을 쓰면 됩니다.
조건문은 "n % i === 1"을 넣으면 되고요.

  • if(n % i === 1)

 

여기서 중요한 건 "return"을 써주는 겁니다.
앞서 "가장 작은 자연수 x를 return" -> "나머지가 1이 되는 자연수를 다 구할 필요가 없다." 이 말을 했잖아요?

그럼 작은 수부터 차례대로 "if(n % i === 1)"를 해주고,
조건에 맞으면 바로 끝내면 되는 거잖아요? 그렇죠?

이미 앞에서 for문을 활용해서 작은 수부터 차례대로 나머지 넣는 값에 넣어 주고 있고,
조건에 맞으면 바로 끝내기 위해 "return"을 사용했습니다.

  • if(n % i === 1) return i;
728x90
반응형