Today
-
Yesterday
-
Total
-
  • 프로그래머스 : 나누어 떨어지는 숫자 배열
    코딩테스트 문제 풀이/프로그래머스 2023. 11. 20. 00:01

    문제 설명

    내 코드

    class Solution {
        public int[] solution(int[] arr, int divisor) {
            int[] answer = {};
            int cnt = 0;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] % divisor != 0) arr[i] = 0;
                else cnt++;
            }
            if (cnt == 0) return new int[]{-1};
    
            answer = new int[cnt];
            for (int i = arr.length - 1; i >= 0 ; i--) {
                if (arr[i]  != 0) answer[--cnt] = arr[i];
            }
    
            int temp;
            for (int i = 0; i < answer.length; i++) {
                for (int j = 0; j < answer.length; j++) {
                    if (answer[i] < answer[j]) {
                        temp = answer[j];
                        answer[j] = answer[i];
                        answer[i] = temp;
                    }
                }
            }
            return answer;
        }
    }

    1. divisor로 나누어떨어지는값 찾기

    // divisor로 나누어떨어지는 숫자의 개수 카운팅 용도
    int cnt = 0;
    for (int i = 0; i < arr.length; i++) {
        // divisor로 나누어 떨어지지 않는 값은 0으로 대체시킴 
        if (arr[i] % divisor != 0) arr[i] = 0;
        else cnt++;
        // divisor로 나누어떨어지는 숫자는 카운팅
    }

    2. 찾는 값이 1개도 없는 경우

    // cnt가 0이면 divisor로 나누어 떨어지는 숫자가 없는것이기 때문에 -1 배열 반환 후 종료
    if (cnt == 0) return new int[]{-1};

    3. answer 배열에 값 복사

    // answer배열의 길이를 카운팅한 숫자만큼 지정 
    answer = new int[cnt];
    for (int i = arr.length - 1; i >= 0; i--) {
        // 배열 뒤에서부터 값이 있는 슷자를 answer에 복사
        if (arr[i] != 0) answer[--cnt] = arr[i];
    }

    4. answer 배열 정렬

    // 정렬
    int temp;
    for (int i = 0; i < answer.length; i++) {
        for (int j = 0; j < answer.length; j++) {
            if (answer[i] < answer[j]) {
                temp = answer[j];
                answer[j] = answer[i];
                answer[i] = temp;
            }
        }
    }

Designed by Tistory / Custom by 얼거스