도현이는 바구니를 총 N
개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
도현이는 앞으로 M
번 바구니의 순서를 회전시키려고 만들려고 한다. 도현이는 바구니의 순서를 회전시킬 때, 순서를 회전시킬 범위를 정하고, 그 범위 안에서 기준이 될 바구니를 선택한다. 도현이가 선택한 바구니의 범위가 begin
, end
이고, 기준이 되는 바구니를 mid
라고 했을 때, begin, begin+1, ..., mid-1, mid, mid+1, ..., end-1, end 순서로 되어있는 바구니의 순서를 mid, mid+1, ..., end-1, end, begin, begin+1, ..., mid-1로 바꾸게 된다.
바구니의 순서를 어떻게 회전시킬지 주어졌을 때, M
번 바구니의 순서를 회전시킨 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
첫째 줄에 N (1 ≤ N ≤ 100)
과 M (1 ≤ M ≤ 100)
이 주어진다.
둘째 줄부터 M
개의 줄에는 바구니의 순서를 바꾸는 만드는 방법이 주어진다. 방법은 i
, j
, k
로 나타내고, 왼쪽으로부터 i
번째 바구니부터 j
번째 바구니의 순서를 회전시키는데, 그 때 기준 바구니는 k
번째 바구니라는 뜻이다. (1 ≤ i ≤ k ≤ j ≤ N)
도현이는 입력으로 주어진 순서대로 바구니의 순서를 회전시킨다.
모든 순서를 회전시킨 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
10 5
1 6 4
3 9 8
2 10 5
1 3 3
2 6 2
1 4 6 2 3 7 10 5 8 9
-문제를 만든 사람: baekjoon
-문제의 오타를 찾은 사람: luke0201, thnam91
import java.util.Scanner;
public class Code10812 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int num=0;
int count=0;
num=scanner.nextInt();
count=scanner.nextInt();
int[] basket=new int[num];
int begin=0;
int end=0;
int mid=0;
int temp=0;
for(int i=0;i<num;i++) {
basket[i]=i+1;
}
for(int i=0;i<count;i++) {
begin=scanner.nextInt();
end=scanner.nextInt();
mid=scanner.nextInt();
change(basket, begin, end, mid);
}
for(int i=0;i<num;i++) {
System.out.print(basket[i]+" ");
}
}
public static void change(int[] basket, int begin, int end, int mid) {
int[] temp=new int[basket.length];
int i=begin-1;
for(int j=0;j<basket.length;j++) {
temp[j]=basket[j];
}
for(int k=mid-1;k<end;k++) { //mid..end
temp[i]=basket[k];
i=i+1;
}
for(int k=begin-1;k<mid-1;k++) {
temp[i]=basket[k];
i=i+1;
}
for(int j=0;j<basket.length;j++) {
basket[j]=temp[j];
}
}
}
i
의 값을 begin-1
로 주니까 해결됐다!
확실히 파이썬이면 더 쉽게 해결할 수 있을 것 같다!