-
[프로그래머스 LV1] 나머지가 1이 되는 수 찾기[프로그래머스] 2024. 5. 19. 01:46
문제 설명
자연수 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 해야 합니다.
풀이과정
- 범위 2 ~ n-1 IntStream
- 나머지 1 인수 필터링
- 최솟값 찾기
import java.util.stream.*; class Solution { public int solution(int n) { return IntStream.rangeClosed(2, n - 1) .filter(i -> n % i == 1) .min() .getAsInt(); } }
배운점
처음에 쓴 코드는 나머지가 1인거 필터링 하고 min()하고 끝냈다
import java.util.stream.*; class Solution { public int solution(int n) { return IntStream.rangeClosed(2, n - 1) .filter(i -> n % i == 1) .min(); } }
/Solution.java:7: error: incompatible types: OptionalInt cannot be converted to int .min(); // 오류뜸 ㅅㅂ;;
그런데 이런 오류가 나와서 확인해보니
IntStream 의 min() 메서드는 필터링 후에 ( 필터링 된 값이 없을경우) 최소값이 존재하지 않을 수도 있기 때문에 OptionalInt를 반환하는데 예외를 던지는 대신 이를 처리할 수 있는 방법을 제공해야한다.
- 결과가 없는 경우를 처리 하는 방법
- orElse()
import java.util.stream.*; class Solution { public int solution(int n) { return IntStream.rangeClosed(1, n - 1) .filter(i -> n % i == 1) .min() .orElse(-1); // 결과가 없을 경우 -1 반환 } }
- getAsInt()_ver1
import java.util.*; import java.util.stream.*; class Solution { public int solution(int n) { OptionalInt min = IntStream.rangeClosed(1, n - 1) .filter(i -> n % i == 1) .min(); return min.isPresent() ? min.getAsInt() : -1; // min 값이 존재하면 min 의 값을 반환 , 없으면 -1 } }
- getAsInt()_ver2
import java.util.stream.*; class Solution { public int solution(int n) { return IntStream.rangeClosed(1, n - 1) .filter(i -> n % i == 1) .min() .getAsInt(); // 값이 있는게 확실해서 결과값만 받아옴 } }
나는 3번이 더 간단해서 이걸루 함 ㅋ
참고자료
getAsInt()_ver2
https://velog.io/@lynnchoi0126/JAVA-OptionalInt-cannot-be-converted-to-int
Stream / Optional
https://velog.io/@gjrjr4545/JAVA-8-3-Stream-Optional의-등장
OptionalInt & Optional<T>
'[프로그래머스]' 카테고리의 다른 글
[프로그래머스 LV1] 나누어 떨어지는 숫자 배열 (0) 2024.05.19 [프로그래머스 LV1] 음양 더하기 (0) 2024.05.19 [프로그래머스 LV1] 약수의 합 (0) 2024.05.19 [프로그래머스 LV1] 문자열을 정수로 바꾸기 (0) 2024.05.19