배움과 기록의 장
[백준] 10812번: 바구니 순서 바꾸기 (Java) 본문
✅ 문제
https://www.acmicpc.net/problem/10812
✅ 풀이
- 우선 바구니 배열을 만들어 1부터 순서대로 담아줬다. 그리고 주어진 begin, end, mid를 기준으로 바구니 배열을 _begin / begin_mid / mid_end / end_ 이렇게 4개의 배열로 나눠주었다. (그림 참고)
- begin_mid, mid_end의 순서를 바꾸어 최종적으로 _begin, mid_end, begin_mid, end_ 순의 배열을 출력하면 끝
- 배열을 쪼개고, 합치는 과정에서 사용한 메서드 (배열 복사)
- Arrays.copyOfRange(Object[] original, int from, int to)
: 배열의 범위를 지정해서 복사
Object[] original = 복사하고자 하는 원본배열
int from = 복사하려는 시작 인덱스
int to = 복사하려는 마지막 인덱스+1 - System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
: 배열의 범위를 지정해서 복사해서 대상배열에 붙여넣음
Object src = 복사할 원본 배열
int srcPos = 원본배열의 복사 시작 인덱스
Object dest = 붙여넣기 할 대상 배열
int destPos = 대상 배열의 복사 시작 인덱스
int length = 복사할 요소의 갯수
- Arrays.copyOfRange(Object[] original, int from, int to)
- 개선
- _begin / begin_mid / mid_end / end_ 나눌 때 굳이 배열로 만들어줄 필요가 없는 것 같다. 결과배열인 result 배열만 새로 만들어 주고, 주어진 기준 인덱스들과 System.arraycopy 만 사용하여 순서바꿔 복사해주면 될 듯
✅ 코드
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int basket = sc.nextInt();
int rotate = sc.nextInt();
int[] baskets = new int[basket];
for(int i = 0; i < basket; i++){
baskets[i] = i+1;
}
for(int i =0; i < rotate; i++ ){
int begin = sc.nextInt()-1;
int end = sc.nextInt()-1;
int mid = sc.nextInt()-1;
int[] _begin = Arrays.copyOfRange(baskets,0,begin);
int[] begin_mid = Arrays.copyOfRange(baskets,begin,mid);
int[] mid_end = Arrays.copyOfRange(baskets,mid,end+1);
int[] end_ = Arrays.copyOfRange(baskets,end+1 ,baskets.length);
System.arraycopy(_begin, 0, baskets, 0, _begin.length);
System.arraycopy(mid_end, 0, baskets, begin, mid_end.length);
System.arraycopy(begin_mid, 0, baskets, begin+ mid_end.length, begin_mid.length);
System.arraycopy(end_, 0, baskets, end+1, end_.length);
}
for(int i = 0; i < baskets.length; i++){
System.out.print(baskets[i] + " " );
}
}
}
반응형
'problem solving' 카테고리의 다른 글
[백준] 2941번: 크로아티아 알파벳 (Java) (0) | 2023.03.09 |
---|---|
[백준] 1157번: 단어 공부 (Java) (0) | 2023.03.09 |
[백준] 10988번: 팰린드롬인지 확인하기 (Java) (0) | 2023.03.09 |
[백준] 11718번: 그대로 출력하기 (Java) (0) | 2023.03.01 |
[백준] 9086번: 문자열 (Java) (0) | 2023.02.27 |