Computer Science (CS)/알고리즘

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

eune7 2023. 5. 7. 20:03
728x90
반응형

 

 

 

 

 

문제

 

 

 

정답 풀이

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken()); // 바구니 개수
        int M = Integer.parseInt(st.nextToken()); // 반복 횟수

        int[] basket = new int[N]; // 바구니 배열
        int[] newBasket = new int[N]; // 결과 바구니 배열

        // 바구니에 값을 1부터 N까지 담는다
        for(int a = 0; a < basket.length; a++){
            basket[a] = a+1;
        }

        for(int b = 0; b < M; b++){
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken())-1;
            int j = Integer.parseInt(st.nextToken())-1;
            int k = Integer.parseInt(st.nextToken())-1;

            // i를 기준으로 반복문을 돌려야 하기에 따로 저장
            int i1 = i;

            // 바구니가 바뀌는 횟수
            for(int c = 0; c < j-i+1; c++){
                // k부터 j까지
                if(c+k <= j){
                    newBasket[c+i] = basket[c+k];
                }
                // i부터 k까지
                else {
                    newBasket[c+i] = basket[i1];
                    i1++;
                }
            }

            // 회전 범위에 속하지 않을 경우
            for(int d = 0; d < N; d++){
                if(newBasket[d] != 0){ 
                    basket[d] = newBasket[d];
                }
            }
        }

        for(int e = 0; e<basket.length; e++){
            bw.write(basket[e]+" ");
        }

        br.close();
        bw.flush();
        bw.close();

    }
}
  • 메모리 15924KB
  • 시간 144ms

처음으로 이틀 동안 이 문제를 붙잡고 하 왜 안되지 왜 오류나지 왜 결과값이 다르지 왜왜왜 ????를 반복했습니다..

저는 basket을 출력하는 것이 아닌 newBasket을 출력하려고 했어요.

그래서 회전 범위에 속하지 않을 떄의 for문을 

// 회전 범위에 속하지 않을 경우
for(int d = 0; d < N; d++){
    if(newBasket[d] == 0){ 
        newBasket[d] = basket[d];
    }
}

이렇게 작성했는데 결과값이 이상하게 나오더라고요

전 아직도 뭔 차이인지 모르겠는데 그냥 체념하고 basket을 출력했습니다.

 

문제를 이해하는데도 오래 걸렸어요..

i부터 j까지 바구니를 바꿀건데 k를 기준으로 해서

i와 k바꾸고, i+1과 k+1바꾸고 1+2와 k+2바꾸고를 반복하는 거에요

 

인덱스도 헷갈려서 -1, +1...(혼돈)

 

막상 풀고나니 그렇게 어려운 건 아니였나 싶기도 하고...(대혼돈)

암튼 풀었습니다!!

 

 

 

 

728x90
반응형