나누어 떨어지는 숫자 배열

SaGo_MunGcci·2022년 7월 19일
0


  • 내가 만든 코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Q14 {
    public int[] solutionQ14(int[] arr, int divisor) {
        ArrayList<Integer> arrayList = new ArrayList<>();

        int[] answer = {};

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0) {
                arrayList.add(arr[i]);
                Collections.sort(arrayList);


            } else if (arr[i] % divisor != 0) {

                if (arrayList.size() == 0) {

                    arrayList.add(-1);

                }
            }
        }
        // 1번째

            System.out.println(arrayList);
            answer = new int[arrayList.size()];
            int size = 0;
            for (int temp : arrayList) {
                answer[size++] = temp;
            }

        return answer;

    }

}
  • 광탈....

  • 문제 접근

  • 임의의 숫자 배열을 입력받아서 divisor로 나눠떨어지면 return으로 해당 숫자의 배열을 출력하는 문제였다.

    1. 해당 나눠지는 값을 arraylist에 넣는다.
    1. arraylist를 오름차순으로 정리한다.
    1. 정리한 arraylist를 다시 int []로 형변환해서 리턴한다.
  • 이게 끝인데 아무리 고쳐봐도 원인이 안보였다.

  • 원인

  • 나누에 떨어지는 element가 하나도 없다면 -1을 반환하세요

  • array는 길이 1이상인 배열입니다.!!!!!!!!!!

  • 내 코드를 자세히 보니까 이상하다.

  • 해당 인덱스의 숫자가 divisor로 선언한 숫자와 나누어지지 않으면 긜고
    arraylist가 비어있으면 -1을 출력해라.

  • 즉 divisor로 나눠 지는 값이 없어서 arraylist가 0이 되어야 -1을 출력해야하는데 나는 조건 문을 넣음으로써 해당 조건을 만족하여야 또 arraylist가 0일때 -1을 반환하는 이상한 코드를 짜버렸다.

for (int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0) {
                arrayList.add(arr[i]);
                Collections.sort(arrayList);


            } else if (arr[i] % divisor != 0) {

                if (arrayList.size() == 0) {

                    arrayList.add(-1);

                }
            }
        }

문재 재접근

  • 다시 이부분을 수정해서 아래와 같이 else if문을 전체 삭제한뒤
 if (arrayList.size() == 0) {

                    arrayList.add(-1);

                }
  • 이부분만 넣어서 코드를 수정하고 제출했다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;


class Solution {
    public int[] solution(int[] arr, int divisor) {
       ArrayList<Integer> arrayList = new ArrayList<>();

        int[] answer = {};

        for (int i = 0; i < arr.length; i++) {


            if (arr[i] % divisor == 0) {
                arrayList.add(arr[i]);
                Collections.sort(arrayList);


            } 
            
        }
        
        if (arrayList.size() == 0) {

              arrayList.add(-1);

                }
            
            answer = new int[arrayList.size()];
            int size = 0;
            for (int temp : arrayList) {
                answer[size++] = temp;
            }

        return answer;
    }
}
  • 해결
  • 나와 비슷한 로직을 사용해 참고한 예제
해답 코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Q14 {
    public int[] solutionQ14(int[] arr, int divisor) {

     		int[] answer = {};
        
          ArrayList<Integer> a1 = new ArrayList<Integer>();
          
          for(int i=0; i<arr.length; i++) {
              if(arr[i]%divisor==0){
              a1.add(arr[i]);
              }
          }
          
          if(a1.isEmpty()) {
              a1.add(-1);
          }
          
          answer = new int[a1.size()];
          
          for(int i=0; i<a1.size(); i++) {
              answer[i] = a1.get(i);
          }
          
          Arrays.sort(answer);
          
          return answer;


    }

}

  • 내가 만든 코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Q14 {
    public int[] solutionQ14(int[] arr, int divisor) {
        ArrayList<Integer> arrayList = new ArrayList<>();

        int[] answer = {};

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0) {
                arrayList.add(arr[i]);
                Collections.sort(arrayList);


            } else if (arr[i] % divisor != 0) {

                if (arrayList.size() == 0) {

                    arrayList.add(-1);

                }
            }
        }
        // 1번째

            System.out.println(arrayList);
            answer = new int[arrayList.size()];
            int size = 0;
            for (int temp : arrayList) {
                answer[size++] = temp;
            }

        return answer;

    }

}
  • 원인
for (int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0) {
                arrayList.add(arr[i]);
                Collections.sort(arrayList);


            } else if (arr[i] % divisor != 0) {

                if (arrayList.size() == 0) {

                    arrayList.add(-1);

                }
            }
        }
profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글