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

최지나·2023년 9월 29일
1

코딩테스트

목록 보기
16/154

문제

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

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

입출력 예

arrdivisorreturn
[5, 9, 7, 10]5[5, 10]
[2, 36, 1, 3]1[1, 2, 3, 36]
[3,2,6]10[-1]

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/12910

생각

  • arr안의 요소들을 루프로 돌면서 divisor로 나누어 떨어지는 리스트를 생성하자
  • divisor로 나누어 떨어지는 요소들이 없다면 -1을 담은 리스트를 만들자
  • 생성된 리스트를 정렬하자

코드


import java.util.*;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        List<Integer> divLst = new ArrayList<>();
        int cnt = 0;
        for (int a: arr){
            if (a % divisor == 0){
                divLst.add(a);
                cnt += 1;
            }
        }
        
        if (cnt == 0){
            divLst.add(-1);
        }

        // List<Integer> to int[]
        int[] answer =  divLst.stream()
                 .mapToInt(Integer::intValue)
                 .toArray();
        
        // Sort element
        Arrays.sort(answer);

        return  answer;
    }
}

  • 정답은 맞았지만 int[] 자료형을 List로 변환한 뒤, 계산 후 다시 int[] 형으로 되돌렸기에 더 간단한 풀이가 있을 것 같았다,,

다른 사람의 풀이


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};
          java.util.Arrays.sort(answer);
          return answer;
  }
}
  • 역시 람다식을 쓰니 형 변환을 하지 않아도 간단하게 divisor로 나누어 떨어지는 수들의 리스트를 구할 수 있었다🫢🫢
  • 가독성에 영향을 주지 않는 선에서 람다식을 사용해봐야겠다,,!
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글