공부/프로그래머스

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

해니0 2024. 7. 30. 12:10

문제

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

class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

 

제한사항

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 해야 합니다.

문제 풀이

분석

n의 최소값은 3이기 때문에 3을 나눠서 1이 나누는 최소값은 2부터 시작

i는 n보다 커질 수 없음

n을 i로 나눠서 1이 되는 경우 for문 종료

 

 

내 소스코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=2;i<n;i++){
            if(n%i==1){
                answer = i;
                break;
            }
        }
        return answer;
    }
}

 

다른 예시 1

class Solution {
    public int solution(int n) {
        int answer = 1;

        while(true) {
            if (n%answer==1) break;
            answer++;
        }

        return answer;
    }
}

 

다른 예시 2

import java.util.stream.IntStream;

class Solution {
    public int solution(int n) {
        return IntStream.range(2, n).filter(i -> n % i == 1).findFirst().orElse(0);
    }
}

 

추가로 고민 할 부분

다른 예시 1 - for, while 중 고민했었는데 while문이 더 깔끔한 느낌이 든다.

다른 예시 2 - stream을 사용해서 코드를 작성하는 경우도 고민해봐야겠다.


Lv.1  / Java / 월간 코드 챌린지 시즌3 기출 문제 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges