[백준]10812 바구니 순서 바꾸기

서은경·2023년 4월 9일
0

CodingTest

목록 보기
62/71

내 방식대로 풀고 다른 사람 풀이를 참고했는데 확연하게 달라서 포스팅 해보는 바구니 순서 바꾸기..!

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으로 고정시켜놔서 런타임 에러났던거 빼면 통과 !!

0개의 댓글

관련 채용 정보