문제
자연수 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
'공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv. 1] 자릿수 더하기 - JAVA (0) | 2024.08.04 |
---|---|
[프로그래머스 Lv. 1] x만큼 간격이 있는 n개의 숫자 - JAVA (0) | 2024.08.03 |
[프로그래머스 Lv. 1] 약수의 합 - JAVA (0) | 2024.08.02 |
[프로그래머스 Lv. 1] 문자열을 정수로 바꾸기 - JAVA (0) | 2024.08.01 |
[프로그래머스 Lv. 1] 문자열 내 p와 y의 개수 - JAVA (0) | 2024.07.31 |