hoon's bLog

Java 프로그래머스 나누어 떨어지는 숫자 배열 자바 본문

코딩테스트/프로그래머스

Java 프로그래머스 나누어 떨어지는 숫자 배열 자바

개발한기발자 2022. 8. 10. 18:04
반응형

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


[문제 설명]

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수 solution을 작성해주세요.

divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

[제한사항]

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

[입출력 예]

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

[나의 풀이]

import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0)
                list.add(arr[i]);
        }

        if(list.size() == 0){
            answer = new int[]{-1};
        }else{
            answer = new int[list.size()];
            for (int i = 0; i < list.size(); i++) {
                answer[i] = list.get(i);
            }
            Arrays.sort(answer);
        }
        return answer;
    }
}

[다른 사람의 풀이]

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int divisor) {
    	int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
        if(answer.length == 0) answer = new int[] {-1};
        Arrays.sort(answer);
        return answer;
    }
}

Stream은 정말 볼 때마다 새롭고,

짧은 라인수에 감격하고,

환장할 성능에 눈물 주륵 ㅠㅠㅠ

 

[정리]

- divisor로 나눠지지 않는 예외를 처리하고, List에 담아 배열로 표현하는 게 관건!

 

개인피셜 난이도 : ★☆☆

Stream 같은 코드는 볼 때마다 대단하지만,

라인 수 대비 떨어지는 성능에 잘 공부를 안 하게 된다ㅠㅠ

빠른 시일 내에 한번 Stream으로 문제를 푸는 것이 이번 목표!

 

끝.

728x90
반응형