최대 1 분 소요

image-20240116095811011

배열 순서를 거꾸로 뒤집는 문제… 분명 학원 다닐 때 풀었던 문제같은데 까먹어서 기록해봄.

import java.util.Scanner;

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

         int N = sc.nextInt();
         int M = sc.nextInt();

         // 바구니 배열 초기화
         int[] baskets = new int[N];
         for (int i = 0; i < N; i++) {
             baskets[i] = i + 1;
         }

         // M번 순서를 역순으로 만듦
         for (int m = 0; m < M; m++) {
             int start = sc.nextInt() - 1;
             int end = sc.nextInt() - 1;

             // 범위의 중간을 기준으로 역순으로 바꿈
             while (start < end) {
                 int temp = baskets[start];
                 baskets[start] = baskets[end];
                 baskets[end] = temp;

                 start++;
                 end--;
             }
         }

         // 결과 출력
         for (int i : baskets) {
             System.out.print(i + " ");
         }
     }
}

범위의 중간을 기준으로 역순으로 바꾸는 이유는 만약, baskets라는 배열에 1, 2, 3, 4, 5라는 배열 값이 들어있을 때, arr[0] 과 arr[4] / arr[1]과 arr[3] 을 바꿔줘야 중간값인 3을 기준으로 순서가 뒤바뀌는 것이기 때문임. 이 중간값을 start++; 와 end–;를 이용해서 (start < end) 조건을 만족할 때로 찾아주면 됨.

처음 시도했을 때는 이 중간값에서 값바꾸는걸 멈춰야하는데 계속 바꿔줘서 값이 이상하게 나옴. 배열 순서를 뒤집는 문제는 중간값에 신경쓰자…

업데이트: