백준 카드 역배치

KIMYEONGJUN·2026년 4월 1일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

총 10개의 줄에 걸쳐 한 줄에 하나씩 10개의 구간이 주어진다.
i번째 줄에는 i번째 구간의 시작 위치 ai와 끝 위치 bi가 차례대로 주어진다.
이때 두 값의 범위는 1 ≤ ai ≤ bi ≤ 20이다.

1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 이용해 입력을 받는다.
cards 배열은 1부터 20까지 카드 번호를 순서대로 저장한다.
10개의 구간이 입력되면, 각 구간을 0-based 인덱스로 변환하여 시작과 끝 위치를 정한다.
구간 부분을 뒤집을 때는 while (a < b) 반복문을 통해 양끝 위치의 값을 서로 교환하면서 점점 중앙으로 이동한다.
모든 입력된 역순 구간 처리가 끝나면 최종 배열을 출력한다.
사용한 BufferedReader 자원을 닫아 시스템 자원 누수를 방지한다.

코드로 구현

package baekjoon.baekjoon_33;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 10804번 문제
public class Main1344 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 1. 카드 초기 배열 준비 (1부터 20까지)
        int[] cards = new int[20];
        for (int i = 0; i < 20; i++) {
            cards[i] = i + 1;
        }

        // 2. 10번의 구간 입력 및 역순 처리
        for (int i = 0; i < 10; i++) {
            String[] input = br.readLine().split(" ");
            int a = Integer.parseInt(input[0]) - 1; // 인덱스 보정 (0부터 시작)
            int b = Integer.parseInt(input[1]) - 1;

            // 3. 구간 [a, b]에 대해 역순으로 배열 부분 뒤집기
            while (a < b) {
                int temp = cards[a];
                cards[a] = cards[b];
                cards[b] = temp;
                a++;
                b--;
            }
        }

        // 4. 최종 카드 배열 출력
        for (int card : cards) {
            System.out.print(card + " ");
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글