네이버클라우드 캠프 | BE/Java 과제

[네이버클라우드 캠프/2주차] 클래스의 생성과 배열 관련 메서드

three kim 2023. 4. 11. 14:59
728x90

 

과제에 대한 블로그 글은 정말 오랜만이네요.

앞으로 과제를 풀며 정리하고 싶었던 내용들에 대해 꾸준히 정리해 나가도록 하겠습니다.

 

문제 : 아래의 static 메서드를 가지는 ArrayUtility 클래스 생성하고 사용하시오.

static int[] remove(int[] arr1, int[] arr2); // arr1에서 arr2배열의 숫자를 모두 삭제한 새로운 배열 리턴

 

ArrayUtility 클래스를 생성하여 주어진 메서드를 static으로 생성해 보겠습니다.

메인에서 이를 구현하는 모습까지 확인하고 세부적으로 설명하도록 하겠습니다.

public class ArrayUtility {
    public static int[] remove(int[] arr1, int[] arr2) {
        // 임시 배열 생성
        int temp[] = new int[arr1.length];
        
        // 임시 배열의 인덱스 생성
        int index = 0;
        
        for(int i : arr1) {
            // 같은지 다른지
            boolean found = false;
            for(int j : arr2) {
                if(i == j) {
                    found = true;
                    break;
                }
            }
            if(!found) {
                temp[index] = i;
                index++;
            }
        }
        // 결과 배열 생성
        int res[] = new int[index];
        for(int i = 0; i < index; i++) {
            res[i] = temp[i];
        }
        return res;
    }
}
public class Main {
	public static void main(String[] args) {
		int arr1[] = {1, 2, 3, 4};
		int arr2[] = {3, 4, 5, 6};
		
		int res[] = ArrayUtility.remove(arr1, arr2);
		
		System.out.println(Arrays.toString(res));
	}
}
<결과>
[1, 2]

 

1. remove 메서드

// 임시 배열 생성
int temp[] = new int[arr1.length];

// 임시 배열의 인덱스 생성
int index = 0;

for(int i : arr1) {
    // 같은지 다른지
    boolean found = false;
    for(int j : arr2) {
        if(i == j) {
            found = true;
            break;
        }
    }
    if(!found) {
        temp[index] = i;
        index++;
    }
}

 

 

위 문제는 집합에서의 여집합을 구하는 것과 유사합니다. (arr1 - arr2)

중복되는 값을 삭제한 새로운 배열을 생성하기에 앞서, temp라는 임시 배열을 생성하였습니다.

 

 

같은 값을 발견하지 못했을 때에는 found라는 불린 값을 false로 반환하여 temp 배열에 값을 저장합니다.

값을 저장하고 다음 인덱스에 값을 저장하기 위해 인덱스 번호를 1 증가시켰습니다. (index++)

같은 값을 발견했을 때에는 found라는 불린 값을 true로 반환할 뿐, 어떠한 동작도 수행하지 않습니다.

 

2. 결과 배열

temp라는 임시 배열을 생성하고, temp의 모든 공간이 아닌 일부(예시는 2개)만 값이 저장될 경우

남은 공간은 0이라는 int형의 기본 값이 대입됩니다.

∴ return temp 시, 0이 포함된 [1, 2, 0, 0]이 출력되게 됩니다.

 

원하는 결과인 [1, 2]를 출력하기 위해서는 res라는 결과 배열을 새로이 생성하여 반환해 줄 수 있습니다.

// 결과 배열 생성
int res[] = new int[index];
for(int i = 0; i < index; i++) {
    res[i] = temp[i];
}
return res;

 

 

마무리

오늘은 지난 2주차 당시 받았던 자바 과제에 대해 정리해봤습니다.

요즘 너무 바삐 공부하고 있어서, 개념을 정리하는 글만 작성했네요. (개념 관련 글에도 아직 추가할게 많습니다..)

 

약 한 달이 지난 지금, 네이버클라우드 캠프 5기에서는 자바를 마치고 DataBase(Oracle)를 배우고 있습니다.

시간 날때마다 과제도 정리하러 돌아오겠습니다 :) 이만... 안뇽 💗