요즘 학교 프로젝트랑 BoB 때문에 바빠서 한 동안 알고리즘을 거의 놓다싶이 해버렸다..
그래서 감을 좀 찾으려고 오랜만에 다시 문제를 풀어보려고 프로그래머스에 들어가서 Level 1 문제를 보고 있었다.
문제는 k 번째 수 라는 문제였었고, 크게 어렵지 않은 문제였다.
코딩테스트 연습 - K번째수
[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]
programmers.co.kr
대충 배열 하나가 주어지고 입력으로 들어오는 i, j 값이 있으면 주어진 배열에서 i ~ j 까지 해당되는 새로운 배열을 만드는 것이 핵심이었다.
나는 반복문을 이용해서 문제를 풀었는데, 다른 풀이를 보니 Arrays 클래스의 copyOfRange
메서드를 이용해서 풀이를 한 사람이 있었고, copyOfRange 에 흥미가 생겨 더 알아보려 한다.
copyOfRange 로 배열 복사하기
- 오라클 공식 문서 Arrays.class;
Arrays (Java Platform SE 7 )
Sorts the specified array into ascending numerical order. Implementation note: The sorting algorithm is a Dual-Pivot Quicksort by Vladimir Yaroslavskiy, Jon Bentley, and Joshua Bloch. This algorithm offers O(n log(n)) performance on many data sets that cau
docs.oracle.com
공식 문서에서 copyOfRange 는 다음과 같이 표현한다.
Copies the specified range of the specified array into a new array.
특정 범위에 따라서 새로운 배열을 반환한다는 것이다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] refinedArray = Arrays.copyOfRange(array, 2, 6);
System.out.println(Arrays.toString(refinedArray));
}
}
Arrays.copyOfRange(원본 배열, 시작 인덱스, 끝 인덱스);
그럼 반환 타입으로 원본 배열과 동일한 타입의 새로운 배열을 반환하게 되는 것이다.
실제 구현이 어떻게 되는지 궁금해서 한 번 찾아보니 다음과 같았다.
public static int[] copyOfRange(int[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
int[] copy = new int[newLength];
System.arraycopy(original, from, copy, 0,
Math.min(original.length - from, newLength));
return copy;
}
- 배열의 size 를 끝 인덱스에서 시작 인덱스 만큼 차감한 값으로 새롭게 할당한다.
- 만약 size 가 음수일 경우, from 이 to 보다 큰 경우는 IllegalArgumentException 을 반환한다.
- System 의
arraycopy
함수를 이용하여 복사본 배열에 저장한다.
엥? System.arraycopy()
에 대해서 봐야겠다.
음... 그냥 배열을 copy 한다고 한다..
아무튼 이렇게 또 하나의 스킬을 배웠다!
'💊 Java & Kotlin & Spring > - Java & kotlin' 카테고리의 다른 글
[조금 더 깊은 Java] Java Bytecode 를 알아보자 (자바를 컴파일하면 어떤 일이 일어날까?) (1) | 2021.11.25 |
---|---|
[조금 더 깊은 Java] String 과 String Constant Pool (0) | 2021.11.23 |
[Java] Bouncy Castle 라이브러리를 이용하여 파일 암호화, 복호화 하기 (feat.블록 암호의 SEED 알고리즘) (0) | 2021.06.19 |
[Java 심화] Generic(제네릭)을 핵심만 이해해보자. (1) | 2020.08.27 |
[Java 심화] List 컬렉션에서 참조변수의 타입을 어떤 것으로 해야할까? (0) | 2020.07.29 |
댓글0