be_better

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

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

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

NiceTry 2023. 8. 9. 23:09

목차

    💎 문제 링크

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

     

    프로그래머스

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

    programmers.co.kr

     

    📝 문제

     

    ✍🏻 입력 & 출력

     

    🤔 풀기 전에 생각하기

    answer로 반환해야 할 배열의 크기가 처음부터 정해져있지 않은 문제이기 때문에

    배열의 크기를 먼저 정해주고 배열을 선언해야 한다.

     

    for 문으로 입력받은 arr배열을 처음부터 돌면서 arr의 원소가 divisor의 배수라면 answer배열의 크기 1 증가

    이 때, 정해진 크기가 0이라면 -1만 갖고있는 길이 1짜리의 배열 return

     

    0이 아닌 크기가 정해졌으면 answer 배열을 선언하고 또 다른 for 문으로 마찬가지로 divisor의 원소라면 answer 배열에 삽입

    Arrays.sort()로 오름차순 정렬 후 return

     

    크기를 정해줘야 하는 배열의 단점 때문에 ArrayList를 이용해 문제를 풀 수도 있겠다.

    대신 return type이 int[] 배열이기 때문에 ArrayList를 int[]로 형변환 해줘야 한다.

     

    ✨ 풀이

    🧶 배열을 이용한 풀이

    import java.util.Arrays;
    
    public class Solution {
        public int[] solution(int[] arr, int divisor) {
            int numLength = 0; // 배열의 크기를 정해줄 numLength
    
            for (int i : arr) {
                if (i % divisor == 0) {
                    numLength++; // divisor의 배수가 있다면 numLength + 1;
                }
            }
    
            /* 
             * numLength가 0이라는 뜻은 divisor의 배수가 없다는 뜻
             * new int[]{-1} 배열을 만들어서 바로 return
             */
            if (numLength == 0) {
                return new int[]{-1};
            }
    
            int[] answer = new int[numLength]; // 정답배열은 numLength 크기로 초기화
    
            int j = 0;
            for (int i : arr) {
                if (i % divisor == 0) {
                    answer[j] = i;
                    j++;
                }
            }
    
            Arrays.sort(answer); // 배열 정렬
    
            return answer;
        }
    }

    🧶 ArrayList를 이용한 풀이

    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Solution {
        public int[] solution(int[] arr, int divisor) {
            
            ArrayList<Integer> answer = new ArrayList<>();
            
            // for-each로 divisor의 배수 일 때 answer.add()
            for (int i : arr) {
                if (i % divisor == 0) {
                    answer.add(i);
                }
            }
            
            // answer에 아무 원소도 들어가지 않았을 때 add(-1) 후에
            // 배열 타입으로 변환 후 리턴
            if (answer.size() < 1) {
                answer.add(-1);
                return answer.stream().mapToInt(i -> i).toArray();
            }
            
            // List 오름차순 정렬
            Collections.sort(answer);
    
            return answer.stream().mapToInt(i -> i).toArray();
        }
    }

     

    배열을 이용한 풀이가 빠르게 동작한다.

    '코딩테스트 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] 프로세스  (0) 2023.08.11
    [프로그래머스] 기능개발  (0) 2023.08.08