Skip to main content

24. [Java] 순서 바꾸기

https://school.programmers.co.kr/learn/courses/30/lessons/181891

  • 정수 리스트 num_list와 정수 n이 주어질 때,
  • num_list를 n 번째 원소 이후의 원소들 & n 번째까지의 원소들로 나눠
  • n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return

  • 2 ≤ num_list의 길이 ≤ 30
  • 1 ≤ num_list의 원소 ≤ 9
  • 1 ≤ n ≤ num_list의 길이

오답

초기 시도 방식 (복잡했던 방법)
  • int[] → StringBuilder로 문자열 변환
  • substring() 으로 문자열을 앞뒤로 자름
  • 자른 문자열을 이어붙임
  • 다시 charAt(i) - '0' 으로 숫자로 바꿔 int[]에 저장
개선 방식 (간단한 배열 조작)
  • 단순히 배열을 n을 기준으로 두 번 순회하여 재배열
    • n번째 이후 → 앞에
    • 0 ~ n-1까지 → 뒤에

정답코드

  • 문자열 처리 필요 없음
  • 배열을 단순히 n을 기준으로 두 부분으로 나눠 재배열하면 끝
class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = new int[num_list.length];
        int idx = 0;
        
        // n번째 이후 요소 먼저
        for (int i = n; i < num_list.length; i++) {
            answer[idx++] = num_list[i];
        }
        
        // n번째까지 요소가 뒤에 오도록
        for (int i = 0; i < n; i++) {
            answer[idx++] = num_list[i];
        }
        return answer;
    }
}
answer[idx++] = num_list[i];

이 코드는 다음과 같은 동작을 한다:

  • num_list[i] 값을 answer[idx]에 넣는다.
  • 그런 다음 idx 값을 1 증가시킨다.
  • 즉, 후위 증가 연산자 idx++ 덕분에 현재 인덱스에 값을 넣고 나서 인덱스를 증가시키는 구조이다.

예를 들면 :

int idx = 0;
answer[idx++] = 5;  // answer[0] = 5, 그리고 idx는 이제 1이 됨
answer[idx++] = 9;  // answer[1] = 9, 그리고 idx는 이제 2가 됨