Algorithm/나머지 문제들

[Baekjoon/JAVA] 백준 10811번 바구니 뒤집기

양선규 2023. 6. 30. 00:50
728x90
반응형

문제
입/출력

 

1번부터 N번까지의 바구니가 존재합니다.

i번~j번 까지의 바구니만을 역순으로 뒤집습니다.

이 작업을 M번 반복합니다.

그리고 마지막 바구니의 순서를 출력하는 문제입니다.

 

 

import java.util.*;
import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		st = new StringTokenizer(br.readLine());
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		int arr[] = new int[n];
		
		for(int i=0; i<arr.length; i++) {
			arr[i] = i+1;
		}
        
		for(int i=0; i<m; i++) {
			
			st = new StringTokenizer(br.readLine());
			
			int start = Integer.parseInt(st.nextToken()) -1;
			int end = Integer.parseInt(st.nextToken()) -1;
			
			while(start < end) {
				int num = arr[start];
				arr[start++] = arr[end];
				arr[end--] = num;
			}
		}
        
		for(int i=0; i<arr.length; i++) {
			sb.append(arr[i]+" ");
		}
        
		System.out.println(sb);
		
		br.close();
	}
}

 

arr[] 리스트를 만들어, 1~n 까지의 값들을 집어넣었습니다. 이것은 바구니들입니다.

 

start, end 변수에 뒤집기 시작할 부분과 끝낼 부분을 입력받았습니다. 그리고 1을 뺐습니다.

바구니는 1번부터 시작하지만, 배열은 0번부터 시작하기 때문에 1을 빼야 배열의 위치와 같아집니다.

 

그리고 while문을 이용해서 해당 범위 내의 값들을 뒤집어주었는데요.

맨 앞부분과 끝부분을 차례대로 뒤집어 나가면 모든 값들을 뒤집을 수 있습니다. 예를 들어,

 

1 2 3 4 5 6 7 8 9 10 배열이 있다고 하면, 먼저 1과 10을 바꾸고,

-> 10 2 3 4 5 6 7 8 9 1

2와 9를 바꾸고,

-> 10 9 3 4 5 6 7 8 2 1

3과 8을 바꾸고,

-> 10 9 8 4 5 6 7 3 2 1

 

이런식으로 맨 앞과 맨 끝부터 짝을 이뤄 바꿔나가면, 모든 값을 뒤집을 수 있습니다.

그리고 그 기능은 while문에서 구현하였습니다.

 

그리고 최종적으로 배열의 값을 출력하여 문제를 해결하였습니다.

728x90
반응형