본문 바로가기

Algorithm/프로그래머스

[프로그래머스/Java] 나머지가 1이 되는 수 찾기

728x90
반응형

//break
public class cate {
	public static void main(String[] args) {
    	int n = 10;
        int x = 0;
        for(x=2; x<10; x++) {
        	if(n%x == 1) {
            	System.out.println(x);
                break;
            }
        }
    }
}

//IntStream
public int solution(int n) {
	return IntStream.range(2, n).filter(i -> n%i==1).findFirst().orElse(0);
    }
}

//List
class Solution {
	public int solution(int n) {
    	List<Integer> result = new ArrayList<>();
        for(int x=2; x<n; x++) {
        	if(n%x==1) {
            	result.add(x);
            }
        }
        return result.get(0);
    }
}


스트림은 잘 사용해보지 않아서 다른사람풀이 보고 공부했다.
1. IntStream.range(2, n)

2부터 n-1까지의 정수 범위로 스트림을 생성한다
   
2. filter(i -> n%i==1)

이 스트림에 필터를 적용하여 n을 i로 나눈 나머지가 1인 i만을 남긴다 
   
3. findFirst()

필터링된 스트림에서 첫 번째 요소를 찾는다

만약 스트림이 비어있다면, 첫 번째 요소는 존재하지 않는다

4. orElse(0)

findFirst() 로 찾은 값이 있으면 그 값을 반환하고, 없으면 0을 반환한다

if(!result.isEmpty()) {
        System.out.println(result.get(0));  // 조건을 만족하는 첫 번째 x 값 출력
    } else {
        System.out.println("조건을 만족하는 x 값이 없습니다.");
    }

자료 구조 사용하는 걸 좋아해서 최대한 사용해보려고 했다.


1. result.add(x);

나머지가 1인 경우, 현재의 x 값을 result 리스트에 추가한다

2. return result.get(0);

반복문이 종료된 후, result 리스트의 첫 번째 요소를 반환한다

 

만약 어떤 x 값도 조건을 만족하지 않아 리스트가 비어있다면, 이 부분에서 IndexOutOfBoundsException이 발생한다.

이렇게 예외 처리를 해주면 되지 않을까..

728x90
반응형