나의 풀이
class Solution {
public int solution(int n) {
int answer = 0;
int i = 1;
while(true) {
if (n % i == 1) {
answer = i;
break;
}
i++;
}
return answer;
}
}
while문을 사용했다.
n을 i로 나눴을 때 나머지가 1이 되는 가장 작은 수를 구해야 해서
i를 1로 초기화하고 처음으로 나머지가 1이 될 때, while문을 종료했다.
다른 사람의 풀이
class Solution {
public int solution(int n) {
int answer = 1;
while(true) {
if (n%answer==1) break;
answer++;
}
return answer;
}
}
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/87389/solution_groups?language=java
i라는 변수를 추가로 사용하지 않고, answer 변수를 1로 초기화해서 사용했다.
메모리 효율면에서 내가 작성한 코드보다 더 좋다고 생각한다.
위 게시글 댓글에는 아래와 같은 방법을 제시하기도 했다.
내 생각에는 이 방법이 더 참신하다고 생각한다.
while (n % answer != 1){
answer ++;
}
또한 intStream을 사용하신 분들도 계셨다.
단순한 경우에는 stream을 사용하는 것이 더 비효율적이라는 의견도 있었지만
나의 경우에는 stream과 친해지기 위해 이참에 조금씩 익숙해지면서 공부해야겠다는 생각이 들었다.
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);
}
}
🔸 IntStream.range(2, n)
- 2부터 n - 1까지의 숫자를 순차적으로 스트림으로 만듭니다.
- 예: n = 10이면 2, 3, 4, 5, 6, 7, 8, 9
🔸 .filter(i -> n % i == 1)
- 각 수 i에 대해 n % i == 1인 조건을 만족하는 값만 남깁니다.
- 예: 10 % 3 == 1, 10 % 9 == 1 → 3, 9만 남습니다.
🔸 .findFirst()
- 필터 조건을 만족하는 첫 번째 수를 반환합니다.
- OptionalInt로 반환되기 때문에,
🔸 .orElse(0)
- 만약 조건을 만족하는 수가 하나도 없다면 기본값 0을 반환합니다.
'CODING > CS, 알고리즘, 자료구조 공부' 카테고리의 다른 글
[프로그래머스] 자연수 뒤집어 배열로 만들기 (1) | 2025.06.13 |
---|---|
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2025.06.04 |
[프로그래머스] 약수의 합 (0) | 2025.05.27 |
[프로그래머스] 자릿수 더하기 (0) | 2025.05.14 |
[쉬운코드] Array List 와 Linked List 의 차이 (0) | 2025.05.13 |