알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

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

programmers.co.kr


Think🤔

나눠서 오름차순 후 정답 구하는 문제


Solution✍
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        ArrayList<Integer> tmp = new ArrayList(); // ArrayList로 만들고 옮기기
        
        for(int i=0; i<arr.length; i++){
            if(arr[i] % divisor == 0){
                tmp.add(arr[i]);
            }
        }
        
        int answer[] = new int[tmp.size()];
        
        if(tmp.size() == 0){
            return new int[]{-1};
        }else{
            Collections.sort(tmp);
            for(int i=0; i<tmp.size(); i++){
                answer[i] = tmp.get(i);
            }
        }
        
        return answer;
    }
}

ArrayList를 사용하지 않는다면 int 타입 배열의 크기를 잘 설정해야됨..

return new int[]{-1}; 을 이용해서 바로 배열을 리턴할 수 있음


Review🤩

한 줄 코드 스트림 참조

import java.util.Arrays;
import java.util.Collections;

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

전 정답은 정렬이 안되어 있어서 정렬 부분을 추가시켜줬다.

stream() 메서드 뒤에 sorted() 메서드를 추가 시킨 후 람다를 사용하면 된다.

.count()가 스트림의 사이즈나 길이를 재주는건데 중간에 삽입해봤는데 에러떠서 length를 비교하는 방법 사용


 

+ Recent posts