S.S.G

나누어 떨어지는 숫자 배열 본문

코딩/알고리즘

나누어 떨어지는 숫자 배열

자유로운개발 2016. 7. 7. 14:59
반응형

 

[문제]

divisible 메소드는 int형 배열 array와 int divisor를 매개변수로 받습니다.
array의 각 element 중 divisor로 나누어 떨어지는 값만 포함하는 새로운 배열을 만들어서 반환하도록 divisible에 코드를 작성해 보세요.

예를들어 array가 {5, 9, 7, 10}이고 divisor가 5이면 {5, 10}을 리턴해야 합니다.

 

 -우선 나누어떨어지는 숫자의 개수를 알아내어 ret[]의 길이를 그 개수로 지정하고, 나누어떨어지는 숫자를 하나씩 불러오도록 계획하였...지만 이 문제를 해결하는데 시간이 많이 걸렸다.

문제의 답은 5와 10  이 두 개이다. ret[] 의 길이는 index를 이용하여 쉽게 불러왔는데 ret[]에 그 값들을 순서대로 불러오는 과정에서 어렵게 생각하여 너무 시간이 많이 걸렸다. 단순하게 ret[count++] 를 해주면 되는데 ret[i]라는 생각에 사로잡혀
ArrayIndexOutOfBoundsException 에러만 계속 나오게 하였다.. 그래도 해결해서 속이 시원하다..ㅎㅎ

 

import java.util.Arrays;

 

class Test {
 public int[] divisible(int[] array, int divisor) {

  int index = 0;
  for (int i = 0; i < array.length; i++) {
  if (array[i] % divisor == 0)
        index++;
  }

  

  int[] ret = new int[index];

  int count = 0;

  for (int i = 0; i < array.length; i++) {
       if (array[i] % divisor == 0)
            ret[count++] = array[i];
  }

  return ret;

 }

 // 아래는 테스트로 출력해 보기 위한 코드입니다.
 public static void main(String[] args) {
  Test div = new Test();
  int[] array = { 5, 9, 7, 10 };
  System.out.println(Arrays.toString(div.divisible(array, 5)));
 }
}

 

실행 결과

 

[5, 10]

 

 

1.

 public int[] divisible(int[] array, int divisor) {
    
    ArrayList<Integer> arrayList = new ArrayList<>();

    for(int i : array){
       if(i%divisor == 0)
         arrayList.add(i);
    }

    int[] ret = new int[arrayList.size()];     
    for(int n =0; n<ret.length;n++){
          ret[n] = arrayList.get(n);
    }
    return ret;
    }

- 다른사람의 답변이다. ArrayList<Integer>를 사용하여 값을 넣고 쉽게 불러왔다.

 

★ for(int num : array) {}   --> for each 문의 형식(JDK 5.0버전부터 향상됨)

 

   for(변수타입 변수이름 : 배열이름) {}

 

  ▷ int num

      -> 배열에 들어있는 한 원소의 값을 저장해 둘 변수를 선언한 것이다. 매번 순환문이 반복될때 마다 num에 배열 원소 값이 대입이 된다.

 

  ▷ :  (콜론)

     -> 왼쪽에 있는 변수에 오른쪽에 있는 배열의 각 원소값이 대입이 된다는 뜻이다.

 

  ▷  array

     -> for 문에서 순환문을 돌릴 대상이 되는 배열

 

 

예제) 배열 출력하기

 

 1. 일만 for 문

 

class Test {

 public static void main(String[] args) {
 

int array[] = {10,20,30,40,50,60};
for(int i=0; i<array.length; i++){
   System.out.println(array[i]);

 }

}

 

2. 향상된 for 문

 

 

class Test {

 public static void main(String[] args) {
 

int array[] = {10,20,30,40,50,60};
for(int num : array){
   System.out.println(num);

 }

}

 

[문제 및 답안 출처: 헬로월드 (http://tryhelloworld.co.kr)]

반응형

'코딩 > 알고리즘' 카테고리의 다른 글

가운데 글자 가져오기  (0) 2016.07.11
평균 구하기  (0) 2016.07.07
문자열 내림차순으로 배치하기  (0) 2016.07.05
짝수와 홀수  (0) 2016.07.05
최대값 최소값 구하기  (0) 2016.07.05