[Java] 백준 10812번: 바구니 순서 바꾸기

U·2023년 3월 12일

백준

목록 보기
21/116

💻 문제


일단 이해하자🤔

  • 정말 오래걸렸던 문제다. 문제는 이해했지만 도저히 로직을 어떻게 짜야할지 모르겠어서 다른 문제를 먼저 풀면서 미뤘던🙄 문제인데 처음 접근법이 잘못됐던 것 같다. 처음에는 M번 i, j, k를 받고 그 안의 for문에서 i부터 j까지 돌렸는데 이렇게하면 바구니의 인덱스 부분이 매우 복잡해졌다.
  • 그래서 차라리 j - i + 1번 돌리고 그 인덱스를 따로 지정해주려고 했는데 이렇게 푸니 생각보다 쉽게 풀렸다! 나는 basket과 똑같은 배열인 newBasket을 생성해서 바뀐 위치를 넣어주고 basket을 다시 newBasket과 같도록 값을 갱신해줬다.

👀 풀이

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));

        String str = bfr.readLine();
        StringTokenizer st = new StringTokenizer(str, " ");
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int basket[] = new int[N + 1];
        int newBasket[] = new int[N + 1];

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

        String method;
        StringTokenizer stt;
        int i, j, k;

        for (int s = 0; s < M; s++) {
            method = bfr.readLine();
            stt = new StringTokenizer(method);
            i = Integer.parseInt(stt.nextToken());
            j = Integer.parseInt(stt.nextToken());
            k = Integer.parseInt(stt.nextToken());
            int ii = i;

            for (int g = 0; g < j - i + 1; g++) {
                if (k + g <= j) {
                    newBasket[g + i] = basket[k + g];
                } else {
                    newBasket[g + i] = basket[ii];
                    ii++;
                }
            }

            for (int g = 1; g <= N; g++) {
                basket[g] = newBasket[g];
            }
        }

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

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

💡 결과


아쉬웠던 점••

  • 굉장히 어려운 문제라고 생각했고 이 문제가 왜 브론즈 2 레벨인지도 이해가 안됐었다😅 풀고나니 생각보다 간단한 문제였음을 깨달았고 문제가 잘 풀리지 않을때는 빠르게 다른 로직을 생각하는 것도 좋은 생각인 것 같다. 너는 왜 문제도 제대로 안 풀고 지레 겁을 먹니? ㅋㅋ
profile
백엔드 개발자 연습생

0개의 댓글