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가 됨