조금 어려웠다.

버블정렬을 잘 쓸일이 없다보니, 할 때마다 복잡하게 느껴지고 불편했다.

그래서, 다른 방법이 없을까 고민했다.

 

1. 문제에서 필요한 스킬은 원하는 크기의 배열 생성

2. 배열에 값을 할당

3. 할당된 값을 특정 부분만 리버스 정렬하여

* 크기를 비교를 하는지, 단순히 자리만 바꾸는지는 문제에 따라서 다르겠지만 넋놓고 풀면 틀릴것 같다.

 

1. int array 로 값을 저장한다음, 스트림을 통해서 리스트로 변환해준다.

(변환한 이유는 Collections.reverse() 를 사용하기 위해서 래퍼타입으로 변환해줬다.

그리고, subList() 를 사용하여, reverse 할 범위를 지정할 수 있기 때문에 해볼만한 방법이라 생각했다.)

 

2. 원본을 복사하여 카피본을 저장한다

3. subList를 통해서 범위를 지정해서 자른다.

4. Collections.reverse(subList) 로 역정렬한다.

5. subList(시작, 끝) 을 사용했기 때문에 정확한 인덱스를 알고 있다

6. 원본인덱스에 맞게 덮어쓴다.

 

 

 

package org.example;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int basketCount = sc.nextInt();
        int countOfReverse = sc.nextInt();

        int[] basket = new int[basketCount];
        // 바구니를 생성
        for(int i = 0 ; i < basketCount; i ++){
            basket[i] = i + 1;
        }

//        System.out.println(Arrays.stream(basket));

        // Reverse
        List<Integer> result = new ArrayList<>();
        for (int i = 0 ; i < countOfReverse; i++) {
            int indexOfFrom = sc.nextInt() - 1;
            int indexOfTo = sc.nextInt() - 1;

//            System.out.println("from : " + (indexOfFrom+ 1) + " to : " + (indexOfTo + 1) );

            List<Integer> list = Arrays
                    .stream(basket)
                    .boxed()
                    .collect(Collectors.toList());

            List<Integer> copy = list;
//            System.out.println("start : " + indexOfFrom + " end : " + indexOfTo);
            copy = copy.subList(indexOfFrom, indexOfTo + 1);
            Collections.reverse(copy);

//            System.out.println("copy reverse : " + copy);

            int count = 0;
            for(int j = indexOfFrom ; j < indexOfTo + 1; j ++){
                basket[j] = copy.get(count);
                count ++;
            }
        }
        for(int out : basket){
            System.out.print(out + " ");
        }
    }
}