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

[백준] 10804번 - 카드 역배치 [Java]

by mwzz6 2025. 1. 5.

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

 

[백준] 10804번 - 카드 역배치 [Java]
[백준] 10804번 - 카드 역배치 [Java]
[백준] 10804번 - 카드 역배치 [Java]


1.  아이디어

 

반복문과 두 수 교환하기의 조합으로 간단하게 구현할 수 있다.


2. 문제풀이

 

한번의 역배치를 처리하는 swap 메서드를 작성하고 10번 반복 사용하는 방식으로 구현했다.

swap은 반복문에서 구간의 양끝 원소부터 안쪽으로 계속 교환을 해나가면 되고 같은 원소가 2번 교환되지 않게 구간의 중간까지만 진행하도록 구현했다.


3. 코드

 

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

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));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int[] arr = new int[1 + 20];
        for (int i = 1; i <= 20; i++) {
            arr[i] = i;
        }

        for (int i = 0; i < 10; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());

            swap(arr, a, b);
        }

        for (int i = 1; i <= 20; i++) {
            sb.append(arr[i]).append(" ");
        }

        bw.write(sb.toString());
        bw.flush();
    }

    private static void swap(int[] arr, int a, int b) {
        for (int i = a; i <= (a + b) / 2; i++) {
            int tmp = arr[i];
            arr[i] = arr[a + b - i];
            arr[a + b - i] = tmp;
        }
    }

}

4. 후기