내 방식대로 풀고 다른 사람 풀이를 참고했는데 확연하게 달라서 포스팅 해보는 바구니 순서 바꾸기..!
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.IntStream;
public class Main_10812 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr = new int[N+1];
for (int i = 0; i <= N; i++) arr[i] = i;
for (int idx = 0; idx < M; idx++) {
String[] s = br.readLine().split(" ");
int i = Integer.parseInt(s[0]);
int j = Integer.parseInt(s[1]);
int k = Integer.parseInt(s[2]);
int[] pre = Arrays.copyOfRange(arr, k , j+1 );
int[] sub = Arrays.copyOfRange(arr, i, k);
//System.out.println(Arrays.toString(pre)+" "+Arrays.toString(sub));
int index = 0;
for (int x = 1; x <= arr.length; x++) {
if(x < i || x > j) {
//System.out.print(x+" 안포함 ");
} else {
if(index < pre.length) {
//System.out.println("p"+x+"->"+pre[index]);
arr[x] = pre[index];
index++;
} else {
int indexSub = (index-pre.length-1)+1;
//System.out.println(x+"->"+sub[indexSub]);
arr[x] = sub[indexSub];
index++;
}
}
}
// 10
// 1 2 3 4 5 6 7 8 9 10
// 1 6 4 -> 4 5 6 1 2 3 7 8 9 10
// 3 9 8 -> 4 5 8 9 6 1 2 3 7 10
// 2 10 5 -> 4 6 1 2 3 7 10 5 8 9
// 1 3 3 -> 1 4 6 2 3 7 10 5 8 9
// 2 6 2 -> 1 4 6 2 3 7 10 5 8 9
}
IntStream.range(0, arr.length)
.filter(i -> i != 0)
.mapToObj(i -> arr[i] + " ")
.forEachOrdered(System.out::print);
}
}
내가 한 방식은 기준이 되는 숫자부터 end까지 배열을 한 카피 뜨고 start부터 기준점 전까지 배열을 한 카피 떠서 기존 배열의 값을 변경하는 형태였다. 어차피 바구니 순서가 안바뀌는 요소는 순서도 값도 그대로이므로..!
이렇게 보니까 내가 좀 복잡하게 구현한거 같기도 하고..?
좀 더 쉽게 접근할 수 있는 법을 찾아봐야지 !
테스트 케이스 검증한다고 배열 사이즈를 10으로 고정시켜놔서 런타임 에러났던거 빼면 통과 !!