오늘은 Java언어로 알고리즘 문제 풀이를 하면서 메서드 사용을 익혔다.
이때까지 배열의 일부분을 자를 때 반복문을 통해 하였다.
// e.g.
// 아래 배열의 인덱스 1에서 인덱스 4까지 자른다고 가정해보자.
int[] nums = {1, 2, 3, 4, 5, 6, 7};
// 새로운 배열을 만든다.
int[] nums2 = new int[3];
// 반복문을 통해 각 배열에 대입한다.
int index = 0;
for (int i = 1; i < 4; i++) {
nums2[index] = nums[i];
index++;
}
위와 같은 방법으로 사용하였다. 하지만 메서드를 사용하면 쉽게 가능하다.
int[] nums = {1, 2, 3, 4, 5, 6, 7};
int[] copyArr = Arrays.copyOf(nums, 3); // [1, 2, 3]
위와 같이 쉽게 복사가 가능하다.
int[] nums = {1, 2, 3, 4, 5, 6, 7};
int[] copyArr = Arrays.copyOfRange(nums, 2, 5); // [3, 4, 5]
특정 위치에서 특정위치까지 복사도 가능하다.
위 메서드를 사용할 사용하면 두 배열을 잘라서 한배열로 만들수 있다.
int[] nums1 = {1, 2, 3, 4, 5, 6, 7};
int[] nums2= {11, 22, 33, 44, 55, 66, 77};
System.arraycopy(nums1, 1, nums2, 2, 3);
System.out.println(Arrays.toString(nums2)); // [11, 22, 2, 3, 4, 66, 77]
위 메서드를 실행 시키면 먼저 배열 nums1의 요소가 nums2로 복사된다. 그리고 nums1의 인덱스 1부터 인덱스 len까지 복사되어 nums2의 인덱스 2 부터 붙여 넣게 된다.
위 메서드를 응용하여 두배열을 합치기가 가능하다.
int[] nums1 = {1, 2, 3, 4, 5, 6, 7};
int[] nums2= {11, 22, 33, 44, 55, 66, 77};
int[] nums3 = new int[nums1.length + nums2.length];
System.arraycopy(nums1, 0, nums3, 0, nums1.length);
System.arraycopy(nums2, 0, nums3, nums1.length, nums2.length);
System.out.println(Arrays.toString(nums3)); // [1, 2, 3, 4, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77]
위와 같이 새로운 배열 하나를 생성 후 배열을 합칠수도 있다.
오늘은 알고리즘 문제를 풀면서 새롭게 갈게된 메서드를 정리 해보았다. 얼마나 많이 써먹을지는 모르겠지만 앞으로 알고리즘 문제를 풀이할 때 이렇게 메서드를 하나씩 알게되면 도움이 되지 않을까 싶어서 이렇게 계속 정리를 한다.