공부하기/백준

[Java] 백준 풀기 10811 - 바구니 뒤집기

XEV 2023. 7. 15. 23:45

자바 백준 10811번

브론즈 2

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

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 시뮬레이션

 

 

 

 

 

문제 풀기

배열에 1부터 N까지 순차적으로 숫자를 저장하여 초기화 한다.

i와 j를 입력받고 reverseBaskets() 메서드를 시행한다.

reverseBaskets() 메서드는 i와 j로 지정된 구간의 양 끝의 수를 서로 바꾸고, 그 다음 i + 1, j - 1 교환, i + 2, j - 2 교환하는 방식으로 while loop를 진행한다. 이때 while은 i가 j보다 작을때만 성립한다.

이렇게 M번의 경우를 모두 진행한 후 최종 바구니 번호 순서를 출력한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        int M = sc.nextInt();

        int[] baskets = new int[N];
        for (int i = 0; i < N; i++) {
            baskets[i] = i + 1;
        }

        for (int i = 0; i < M; i++) {
            int start = sc.nextInt();
            int end = sc.nextInt();
            reverseBaskets(baskets, start, end);
        }

        for (int i = 0; i < N; i++) {
            System.out.print(baskets[i] + " ");
        }
    }

    private static void reverseBaskets(int[] baskets, int start, int end) {
        while (start < end) {
            int temp = baskets[start - 1];
            baskets[start - 1] = baskets[end - 1];
            baskets[end - 1] = temp;
            start++;
            end--;
        }
    }
    
}