Study with me/프로그래머스 L0 마스터하기

프로그래머스 - L0 배열회전시키기 // 배열 복사

외계나무 2024. 1. 7. 11:30

프로그래머스 - level 0 배열 회전시키기

두 가지로 풀어봄.

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 티스토리