[백준] 10812

당당·2023년 4월 21일
0

백준

목록 보기
32/179

https://www.acmicpc.net/problem/10812

📔문제

도현이는 바구니를 총 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)

도현이는 입력으로 주어진 순서대로 바구니의 순서를 회전시킨다.


📺출력

모든 순서를 회전시킨 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.


📝예제 입력 1

10 5
1 6 4
3 9 8
2 10 5
1 3 3
2 6 2

📺예제 출력 1

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로 주니까 해결됐다!

확실히 파이썬이면 더 쉽게 해결할 수 있을 것 같다!

profile
MySQL DBA 신입 지원

0개의 댓글