728x90
KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | Algorithm CODEKATA
➗ 나머지가 1이 되는 수 찾기
🏷 관련 주제 : 반복문
연산자
나머지 연산자
조건문
문제 설명
자연수 n
이 매개변수로 주어집니다.n
을 x
로 나눈 나머지가 1
이 되도록 하는 가장 작은 자연수 x
를 return 하도록 solution 함수를 완성해주세요.
답이 항상 존재함은 증명될 수 있습니다.
제한사항
- 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 해야 합니다.
✔ Solution with Loop & Arithmetic Operator
class Solution {
public int solution(int n) {
int x = n - 1;
for (int i = 2; i < n - 1; i++) {
if(n % i == 1) {
x = i;
break;
}
}
return x;
}
}
채점 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제의 : 매개변수로 받은 n
을 자연수 x
로 나눈 나머지가 1
이 되게 하는 가장 작은 x
를 반환하시오.
1
은 모든 수의 약수이므로 1
은 x
가 될 수 없다.
최악의 경우라도 n
을 n - 1
로 나누면 나머지가 1
이므로
문제의 조건을 만족하는 자연수 x
는 n - 1
로 존재함을 알 수 있다.
1. 반환할 값을 담을 변수 x
를 n - 1
로 초기화 하자.
(
n - 1
은 최악의 경우x
가 갖게 될 값)
int x = n - 1;
x
는 1
이 될 수 없고x
에 이미 n - 1
이 할당되어 있으므로
반복문은 2
부터 n - 2
까지의 범위만 돌리면서 n
을 나눈 나머지가 1
인 n - 1
보다 작은 자연수가 존재하는지 체크할 것이다.
2. int 변수 i
의 값이 2
부터 n - 2
까지 1
씩 순차적으로 증가하도록 하면서 반복문을 돌리자.
for (int i = 2; i < n - 1; i++) {
...
}
3. 변수 i
로 n
을 나누었을 때, 나머지가 1
이면 x
에 i
를 할당하고 반복문을 멈추자.
if(n % i == 1) {
x = i;
break;
}
4. 반복문이 끝나면 x
에 할당된 값을 반환하자.
return x;
💬 무엇을 새롭게 알았는지
문제에서 답이 왜 항상 존재하는지,
최악의 경우 반한될 값은 얼마인지 등을 생각하면서 초기값을 할당하고
반복문의 범위를 정하면서 코드를 작성해 보았다.
📚 References(참고 자료)
728x90