본문 바로가기
IT/Algorithm

프로그래머스(Programmers) 나누어 떨어지는 숫자 배열(java)

by flatsun 2019. 8. 11.
반응형

프로그래머스 

문제명 : 문자열 내 p와 y의 개수나누어 떨어지는 숫자 배열

언어 : 자바(java)

 

int 형태의 array를 받아서

divisor로 나눠본 뒤에

 

나누어지는 수를 오름차순 정렬한 후

answer 배열에 담아 반환하고

만약 나누어지는 숫자가 없다면 -1를 담아 반환하는 문제인데

 

문제에서 포인트는 배열을 받아와서 나누고 어떻게 오름차순 정렬해서 담지?

이거다

 

일단 내 풀이는 아래와 같은데

 

for문을 돌려서 나누어 떨어지는 값을 list에 담아준 다음에 

Collection.sort로 list의 값을 오름차순으로 정렬하고

 

반환할 answer 배열을 list의 크기로 정의해 준 뒤에

먼저 나누어 떨어지는 값이 없으면 answer 배열의 크기를 한칸짜리로 만든 뒤

바로 -1 넣고 반환해버리고

 

그렇지 않고 나누어 떨어지는 값이 있을 경우에는

for문을 돌려서 list의 길이만큼 배열에 넣고 반환한다

 

처음에는 list에 넣은다음에 list를 array 형태로 바꿔서 반환하려고 했는데

Solution이 int[] 타입으로 반환해야 하는데

list에서는 Integer[] 타입만 반환할 수 있으므로 그게 안되더라

그래서 list를 한번 돌려서 answer 배열안에 한번 더 넣는 과정을 거쳤는데

 

뭔가 짱구를 좀 더 굴려보면 list 한방에 변환해서 반환할 수 있을 것 같은데

거기까지는 머리가 안굴러가더라

 

마지막으로

아래 코드를 복사 붙여넣기 하면

프로그래머스 문제는 바로 끝이 난다

import java.util.ArrayList;
import java.util.Collections;

class Solution {
	  public int[] solution(int[] arr, int divisor) {
		  ArrayList<Integer> list = new ArrayList<>();
		  
		  for(int i = 0; i<arr.length; i++) {
			  if(arr[i] % divisor == 0) {
				  list.add(arr[i]);
			  }
		  }
		  
		  Collections.sort(list);
		  int[] answer = new int[list.size()];
		  
		  if(list.size() == 0) {
			  answer = new int[1];
			  answer[0] = -1;
		  } else {
			  for(int i =0; i<list.size(); i++) {
				  answer[i] = list.get(i);
			  }
		  }
	      return answer;
	  }	
}
반응형

댓글