Study with me/프로그래머스 L0 마스터하기
프로그래머스 - L0 배열회전시키기 // 배열 복사
외계나무
2024. 1. 7. 11:30
두 가지로 풀어봄.
class Solution {
public int[] solution(int[] numbers, String direction) {
int[] answer = new int[numbers.length];
int a = direction.equals("right") ? 1 : numbers.length-1;
for(int i=0; i<answer.length; i++) {
answer[(i+a)%numbers.length] = numbers[i];
}
return answer;
}
}
class Solution {
public int[] solution(int[] numbers, String direction) {
int[] answer = new int[numbers.length];
if(direction.equals("right")) {
System.arraycopy(numbers, 0, answer, 1, numbers.length-1);
answer[0] = numbers[numbers.length-1];
} else {
System.arraycopy(numbers, 1, answer, 0, numbers.length-1);
answer[numbers.length-1] = numbers[0];
}
return answer;
}
}
배열을 복사하는 방법
얕은 복사 (주소값 복사 - newArray 수정하면 oldArray에도 영향 O)
newArray = oldArray;
: newArray 변수가 oldArray 메모리 주소를 가리키게 하는 것.
깊은 복사 (값만 복사해오기 - newArray 수정해도 oldArray에 영향 X)
newArray = oldArray.clone();
: oldArray의 값 그대로 복사해오기.
System.arraycopy(oldArray, o_index, newArray, n_index, len);
: oldArray의 특정 인덱스부터 원하는 길이로 자른 일부의 값만 newArray의 특정 인덱스부터 복사해 넣기.
newArray = Arrays.copyOf(oldArray, len);
: oldArray의 값을 원하는 길이만큼 복사해오기. len이 oldArray 길이보다 짧으면 len만큼만 잘라서 복사, 길면 남은 인덱스 값은 0으로 초기화.
newArray = Arrays.copyOfRange(oldArray, start_index, end_index);
: oldArray의 특정 인덱스부터 특정 인덱스까지의 값 복사해오기. end_index가 oldArray를 초과하면 남은 인덱스 값은 0으로 초기화.
참고 : lijiy 티스토리