각시탈코더 2022. 8. 28. 16:34

문제: 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.

 

class Exercise5_5 {
	public static void main(String[] args) {
    	int[] ballArr = {1,2,3,4,5,6,7,8,9};
        int[] ball3 = new int[3];
        
        // 배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다.
        for(int i=0; i<ballArr.length; i++) {
        	int j = (int)(Math.random() * ballArr.length);
            int tmp = 0;
            
            <--------문제-------->
            
            
            <--------문제-------->
        }
        
        //배열 ballArr의 앞에서 3개의 수를 배열 ball3로 복사한다.
        <--------문제-------->
        
        <--------문제-------->
        
        for(int i=0; i<ball3.length; i++) {
        	system.out.print(ball3[i]);
        }
        System.out.println();
    }
}

 

문제의 핵심 Key

  1. 두 변수를 바꾸는 방법을 아는가?
  2. 배열을 복사하는 메서드를 사용할 수 있는가?

나의 오답원인

  1. 두 수를 바꾸는 방법은 제대로 이해하지 못했다.
  2. System.arraycopy()의 존재를 몰랐다.

 

핵심개념

1.두 변수의 값을 바꾸는 방법

 

class practice {
	public static void main(String args[]) {
    int x = 10, y = 5
    
    int tmp = x; // 1. x의 값을 tmp에 저장
    x = y; // 2. y의 값을 x에 저장
    y = tmp;  // 3. tmp에 저장된 값을 y에 저장
    
    System.out.println("x="+x);
    System.out.println("y="+y);
   }
}

 

2.배열의 복사

a.배열 전체 복사 copyOf()

int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // 결과 arr2=[0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3); // 결과 arr3=[0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7); // 결과 arr4=[0,1,2,3,4,0,0]

 

 

b.배열 일부를 복사 copyOfRange()

 

int[] arr = {0,1,2,3,4};
int[] arr5 = Arrays.copyOfRange(arr, 2, 4); //arr5=[2,3]
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); //arr6=[0,1,2,3,4,0,0]

 

문제를 풀기위해 했던 노력

 


출처:자바의 정석 기초편(저자:남궁성, 출판사: 도우출판)