프로그래머스 Level1-2 | 직사각형 별찍기

yuriyaam·2021년 1월 20일
0

문제

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

제한사항

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

예시

public static int[] solution(int[] arr, int divisor) {
  int[] answer = {};
  int j = 0;

  for (int i = 0; i < arr.length; i++) {
      if (arr[i] % divisor != 0) {
          arr[i] = 0;	// 나누어떨어지지 않는다면 0으로 치환해 없는 값으로 생각하도록 한다.
      } else {
          j++;		// 배열 answer의 크기를 정해줄 j
      }
  }

  if (j == 0) {			// 나누어 떨어지는 숫자가 없다면
      j++;			// 배열 answer의 크기는 1
      answer = new int[j];
      answer[0] = -1;		// 그리고 -1을 넣어준다.
  } else {			// 나누어 떨어지는 숫자가 있다면
      answer = new int[j];	// 배열 answer의 크기는 j
      j = 0;

      for (int i = 0; i < arr.length; i++) {
          if (arr[i] != 0) {		// 0이 아닌 값. 즉, 나누어 떨어지는 값
              answer[j] = arr[i];
              j++;
          }
      }

      int temp;

 	// 오름차순 정렬 코드
     for (int i = 0; i < answer.length - 1; i++) {
          for (j = i + 1; j < answer.length; j++) {
              if (answer[i] > answer[j]) {
                  temp = answer[i];
                  answer[i] = answer[j];
                  answer[j] = temp;
              }
          }
      }
  }
  return answer;
}

내가 작성한 코드인데 너무 길다..;

더 좋은 코드..

public static 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;
}

0개의 댓글