곽로그

[백준 10811, JAVA] 바구니 뒤집기 본문

알고리즘/백준

[백준 10811, JAVA] 바구니 뒤집기

일도이동 2023. 3. 12. 18:06
반응형

문제

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

 

10811번: 바구니 뒤집기

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

www.acmicpc.net

 

풀이

문제에서 주어지는 i번째와 배열의 index만 잘 구분하면 쉽게 풀 수 있는 문제다. 컨셉은, 원래의 배열에서 i번째 부터 j번째 원소를 입력받을 새로운 배열을 만든 다음, 이 새로운 배열의 역순부터 0번째까지의 원소를 원래배열에 다시 복사 해 놓는 것이다. 

 

길이가 n인 배열(가)의 a번째 부터 b번째 까지의 원소를 거꾸로 뒤집는 다고 가정하자 

(여기서 주의할 점은 a가 배열의 인덱스로 치환 될 수 있도록, 입력받은 숫자에서 -1 을 해야한다)

1) 길이가 b-a+1인 새로운 배열(나)를 생성한다

2) (가)배열의 index =a 부터 index= b까지의 원소를 (나)배열의 0번째 부터 b-a까지 복사 한다

3) (나)배열의 index= b-a 부터 index=0번째 까지의 원소를 (가)배열의 index = a 부터 index =b 까지 복사한다

 

 

 

 

코드 

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

public class baekjoon10811 {
    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 ;
        int n,m;
        int a,b;
        int[] originArray;
        int[] tempArray;

        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        //초기 배열 셋팅
        originArray = new int[n];
        for(int i =0; i<n; i++){
            originArray[i] = i+1;
        }

        //swap작업을 m번 반복
        for(int i =0; i<m; i++){
            st = new StringTokenizer(br.readLine());
            a = Integer.parseInt(st.nextToken())-1;
            b = Integer.parseInt(st.nextToken())-1;

            //길이가 b-a +1 인 배열 생성
            tempArray = new int[b-a+1];

            //원래 배열의 index=a 부터  index=b 까지 임시배열에 복사
            for(int j = a; j<=b ;j++){
                tempArray[j-a] = originArray[j];
            }

            //임시배열의 끝에서부터 0번째 인덱스원소를 원래 배열의 a번째 인덱스 부터 b번째 인덱스 까지 복사
            for(int j= b-a; j>=0; j--){
                originArray[b-j] = tempArray[j];
            }
        }

        //출력
        for(int i =0; i<originArray.length;i++){
            bw.write(originArray[i]+" ");
        }
        bw.flush();




    }
}
반응형
Comments