본문 바로가기
코딩테스트/백준

[백준/10811] 바구니 뒤집기 (Java)

by wo__ongii 2024. 12. 30.
728x90

[풀이1]

 

[예시1]

int i=1, int j=3 일 경우 (범위가 홀수일 경우)
1. arr[0] = arr[2]
2. arr[1] = arr[1]
3. arr[2] = arr[0]
- 1번부터 3번까지 횟수로는 3번이지만 실제로 1,3번은 서로 바뀌바뀌며, 2번은 같은 값이니 총 1번만 바꾸면 됨

[예시2]

int i=1, int j=4 일 경우 (범위가 짝수일 경우)
1. arr[0] = arr[3]
2. arr[1] = arr[2]
3. arr[2] = arr[1]
4. arr[3] = arr[0]
- 1번부터 4번까지 횟수로는 4번이지만 실제로 1,4번과 2,3번은 서로 바뀌니 총 2번만 바꾸면 됨

따라서 반복문 길이는 ((j-i)+1)/2이다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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[] arr = new int[N];
        for(int k=0; k<N; k++){
            arr[k] =k+1;
        }
        for(int k=0;k<M;k++){
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int num = ((j-i)+1)/2;
            for(int n=0;n<num;n++){
                int temp;
                temp = arr[i-1+n];
                arr[i-1+n] = arr[j-1-n];
                arr[j-1-n] = temp;
            }
        }
        for(int k=0;k<arr.length;k++){
            bw.write(arr[k]+" ");
        }
        br.close();
        bw.flush();
        bw.close();
    }
}

 

728x90
반응형