반응형
문제 설명
자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.
제한 사항
- 3 ≤ n ≤ 1,000,000
입출력 예
CODE
class Solution {
public int solution(int n) {
boolean isEven = n % 2 == 0 ? true : false;
if(isEven) {
for(int i = 1; i < n; i+=2) {
if(n % i == 1) return i;
}
} else {
for(int i = 1; i < n; i++) {
if(n % i == 1) return i;
}
}
return -1;
}
}
처음에는 쉽게 생각해서 for문의 i 값을 1로 주고 1씩 증가시켜서 나머지 연산을 하는 방법으로 코딩했는데 조금 더 빠르게 하는 방법이 없을까 고민하다가 n의 값이 짝수인 경우에는 짝수로 나눈 나머지 값이 무조건 짝수라는 생각에 for문을 돌기 전에 n의 값이 짝수인지 판별 후 짝수이면 2씩 증가하고, 홀수이면 원래 생각했던 i가 1씩 증가하는 for문을 작성했다. 그런데 더 생각해보니 홀수의 경우는 무조건 2로 나누면 나머지가 1인 거 같아 코드를 변경하고 제출해보니 정답이었다..!
반응형
CODE2
class Solution {
public int solution(int n) {
boolean isEven = n % 2 == 0 ? true : false;
if(isEven) {
for(int i = 1; i < n; i+=2) {
if(n % i == 1) return i;
}
} else return 2; // n 값이 홀수인 경우에는 무조건 2를 return
return -1;
}
}
실행 결과
반응형