- [백준] - 10811 - 바구니 뒤집기 2023.10.27
2023. 10. 27. 14:38
조금 어려웠다.
버블정렬을 잘 쓸일이 없다보니, 할 때마다 복잡하게 느껴지고 불편했다.
그래서, 다른 방법이 없을까 고민했다.
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 + " ");
}
}
}
'AREA(지속적인 일상) > 02_백준' 카테고리의 다른 글
[백준] - 25083 - 쌔싹 (1) | 2023.10.30 |
---|---|
[백준] - 27866 - 문자와 문자열 (0) | 2023.10.30 |
[백준] - 10813 - 공바꾸기 (1) | 2023.10.27 |
[백준] - 5597 - 과제 안 내신 분..? (0) | 2023.10.26 |
[백준] - 10810 - 공 넣기 (0) | 2023.10.26 |