[Java] 백준 10811번: 바구니 뒤집기

U·2023년 2월 26일

백준

목록 보기
10/116

💻 문제


일단 이해하자🤔

  • 1부터 N까지의 바구니에 각각의 수를 넣고 i부터 j까지 바구니를 역순으로 M번 정렬한다.
  • 바구니 arr를 만들고 i와 j를 입력 받는다. 예를 들어 1, 2, 3, 4를 역순 정렬할때 1과 4를 바꾸고 2와 3을 바꾸면 된다. 즉, ij를 바꾸고 i + 1j - 1를 바꾸고.. 이를 계속 반복하도록 로직을 짰다. 그래서 ssi부터 (j - i) / 2 + i로 설정 했고 tmp를 이용해서 순서대로 바꿔준다.

👀 풀이

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        String str = bfr.readLine();
        st = new StringTokenizer(str, " ");

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int arr[] = new int[N + 1];

        int i, j, tmp = 0;

        for(int s = 1; s <= N; s++) {
            arr[s] = s;
        }

        for(int s = 0; s < M; s++) {
            String as = bfr.readLine();
            StringTokenizer stt = new StringTokenizer(as, " ");
            i = Integer.parseInt(stt.nextToken());
            j = Integer.parseInt(stt.nextToken());

            for(int ss = i; ss <= (j - i) / 2 + i; ss++) {
                tmp = arr[ss];
                arr[ss] = arr[j - ss + i];
                arr[j - ss + i] = tmp;
            }
        }

        for(int s = 1; s <= N; s++) {
            bfw.write(arr[s] + " ");
        }

        bfr.close();
        bfw.flush();
        bfw.close();
    }
}

💡 결과


아쉬웠던 점••

  • ss의 범위를 i부터 어디까지로 설정해야 할지 모르겠어서 문제 푸는데 오래걸렸다. 예제의 문제를 하나하나 대입하며 생각해보니 풀려서 로직이 생각나지 않을때에는 예제를 활용하는 것도 좋은 것 같다.
profile
백엔드 개발자 연습생

0개의 댓글