본문 바로가기

Algorithm

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

1. 문제

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

 

10804번: 카드 역배치

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

www.acmicpc.net

 

 

2. 풀이

  • 문제에 카드 20장이라고 정해주었으므로 20칸을 가진 int형 배열을 만든다.
  • 2개씩 10개의 입력이 주어진다. (인덱스와 맞추기 위해서 -1)
  • 변수를 하나 만들어 주고 입력값을 서로 빼준다. (start변수가 end변수보다 숫자가 작으면 마이너스 숫자가 나올 수 있어 Math.abs() 음수를 양수로 바꾸어 주는 메소드를 활용하고, 나온 숫자만큼 자리 바꿔주기 위하여 나누기 2를 해주는게 핵심이다.

3. 코드

package baekjoon;

import java.util.Scanner;

public class Q10804 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

        for (int i = 0; i < 10; i++) {
            int start = scanner.nextInt() - 1;
            int end = scanner.nextInt() - 1;

            int num = (Math.abs(start - end + 1) / 2);
            int count = 0;
            for (int j = 0; j < num; j++) {
                int tmp = arr[start + count];
                arr[start + count] = arr[end - count];
                arr[end - count] = tmp;
                count++;
            }
        }
        for (int b : arr) {
            System.out.print(b + " ");
        }
    }
}