12910번
코딩테스트 연습 - 나누어 떨어지는 숫자 배열 | 프로그래머스 (programmers.co.kr)
풀이
나누어 떨어지는 ▶ 나누어서 나머지가 0이 나오는 요소만 찾기!
✔ 주의할 점은 배열은 나누어 떨어지는 요소가 없으면 배열에 { -1 } 을 담아 리턴해야 한다는 점입니다.
그리고 이 나누어 떨어진 값들도 정렬을 해야 합니다.
- 풀이1
public int[] solution(int[] arr, int divisor) {
int[] answer = Arrays.stream(arr).filter(i -> i % divisor == 0).sorted().toArray();
return answer.length == 0 ? new int[] { -1 } : answer;
}
stream을 조금 사용해 보았다면 아주 쉽게 풀 수 있는 문제입니다.
✅ IntStream java.util.Arrays.stream(int[] array)
배열을 stream 형태로 만들 수 있어요!
만약 그냥 Stream.of(arr) 이런 식으로 쓰게 되면 int[] 타입의 stream이 만들어져서 원하는 결과가 아닐 거예요...ㅜㅜ
✅ 먼저 filter를 통해 divisor로 나누어 떨어지는 값들만 걸러내요.
✅ stream에서는 sorted()를 통해 간단하게 정렬도 할 수 있죠.
✅ 만들어진 stream을 toArray()를 통해 다시 배열로 반환합니다. 참고로 우리가 만든 stream은 IntStream이기 때문에 자동으로 int[] 로 반환됩니다.
✔ 테스트 케이스 처리속도: 평균 4ms / 최대 6.74ms
- 풀이2
public int[] solution(int[] arr, int divisor) {
List<Integer> list = new ArrayList<Integer>();
for (int i : arr) {
if (i % divisor == 0) list.add(i);
}
list.sort( (a, b) -> { return a - b; } );
int[] answer;
if (list.isEmpty()) {
answer = new int[] { -1 };
} else {
answer = new int[list.size()];
for (int i = 0; i < list.size(); i++) answer[i] = list.get(i);
}
return answer;
}
풀이1의 처리속도가 너무 마음에 안 들더라구요... 그래서 처리속도 좀 줄여보려고 풀이2로 풀었어요.
속도가 지연되는 건 안 쓰려고 한 풀이입니다.
우선 나누어 떨어지는 요소만 list에 담아둡니다.
정리된 list를 오름차순으로 정렬하고
다시 배열로 변환해서 반환하면 끝입니다.
✔ 테스트 케이스 처리속도: 평균 0.8ms / 최대 2ms
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - [1차] 비밀지도 java :: 2018 KAKAO BLIND RECRUITMENT (0) | 2022.07.02 |
---|---|
프로그래머스 [1차] 다트 게임 java :: 2018 KAKAO BLIND RECRUITMENT (0) | 2022.07.01 |
프로그래머스 - 문자열 내 마음대로 정렬하기 java (0) | 2022.07.01 |
프로그래머스 - 문자열 내림차순으로 배치하기 java (0) | 2022.06.29 |
프로그래머스 - 시저 암호 java (0) | 2022.06.27 |