본문 바로가기
Baekjoon 자바 코드/1차원 배열

[백준] 10811번 바구니 뒤집기 풀이 코드 (Java 자바)

by 망댕이 2024. 8. 5.
반응형

접근 방법)

이 문제는 배열을 2개를 이용하여 문제를 해결할 수 있다.

배열을 2개를 사용하는 이유는 입력 값에서 주어진 범위 안에서 역순으로 나타낸 배열을 잠시 저장할 수 있는 배열이 필요하기 때문이다.

말만으로 이해가 되지 않으면 아래 코드를 참고해보자.

 

▷ 역순 배열 저장

for문을 이용하여 arr2 배열에 입력값 범위 내에서 역순으로 만든 다음(저장), arr1에 arr2 모든 배열 값들을 순서대로 똑같이 복사하는 방법을 이용한다.

for(int i = 0; i < m; i++){
    int a = sc.nextInt();
    int b = sc.nextInt();

    for(int j = a-1, k = b-1; j < b; j++, k--){
        arr2[j] = arr1[k];
    }
    for(int j = 0; j < n; j++){
        arr1[j] = arr2[j];
    }
}

 

이런 방법을 생각해서 배열 번호와 입력 값에 해당하는 숫자 번호를 일치 시킬 때 머리가 조금 아프다

 

이 방법을 이용해서 아래와 같이 코드를 완성해 보자.

정답 코드 1)

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] arr1 = new int[n]; // 출력할 배열
        int[] arr2 = new int[n]; // 역순으로 정렬한 배열을 잠시 저장할 배열
        
        for(int i = 0; i < n; i++){
            arr1[i] = i+1;
        }
        for(int i = 0; i < n; i++){
            arr2[i] = i+1;
        }
        
        for(int i = 0; i < m; i++){
            int a = sc.nextInt();
            int b = sc.nextInt();

            for(int j = a-1, k = b-1; j < b; j++, k--){ // 입력값 범위 내에서 역순으로 나타냄
                arr2[j] = arr1[k]; // arr2 에 역순 배열 임시 저장
            }
            for(int j = 0; j < n; j++){
                arr1[j] = arr2[j]; // arr2의 역순 배열을 불러옴
            }
        }
        for(int i = 0; i < n; i++){
            System.out.print(arr1[i]+" ");
        }
        
    }
}

 

반응형