23.06.21 TIL

정길규·2023년 6월 21일

알고리즘 풀이

오늘은 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++;
}

위와 같은 방법으로 사용하였다. 하지만 메서드를 사용하면 쉽게 가능하다.

Arrays.copeOf(원본배열, 복사할 길이);

int[] nums = {1, 2, 3, 4, 5, 6, 7};

int[] copyArr = Arrays.copyOf(nums, 3); // [1, 2, 3]

위와 같이 쉽게 복사가 가능하다.

Arrays.copeOfRange(원본배열, 시작 인덱스, 끝낼 인덱스)

int[] nums = {1, 2, 3, 4, 5, 6, 7};

int[] copyArr = Arrays.copyOfRange(nums, 2, 5); // [3, 4, 5]

특정 위치에서 특정위치까지 복사도 가능하다.

System.arraycopy(source_arr, sourcePos, dest_arr, destPos, len)

  • source_arr : 복사할 배열
  • sourcePos : 복사한 배열의 복사를 시작할 인덱스
  • dest_arr : 붙여넣기 할 배열
  • destPos : 붙여넣기를 시작할 인덱스
  • len : 복사할 배열을 얼마나 복사해 붙여 넣을지 길이 지정

위 메서드를 사용할 사용하면 두 배열을 잘라서 한배열로 만들수 있다.

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]

위와 같이 새로운 배열 하나를 생성 후 배열을 합칠수도 있다.

마치며

오늘은 알고리즘 문제를 풀면서 새롭게 갈게된 메서드를 정리 해보았다. 얼마나 많이 써먹을지는 모르겠지만 앞으로 알고리즘 문제를 풀이할 때 이렇게 메서드를 하나씩 알게되면 도움이 되지 않을까 싶어서 이렇게 계속 정리를 한다.

0개의 댓글