본문 바로가기
백준 문제 풀이/1차원 배열

(#10811 Java) 바구니 뒤집기

by _비니_ 2023. 8. 11.
문제

 

 

 

문제 이해

 

5 4 : 5개의 바구니. 순서대로 1 2 3 4 5 의 번호가 적혀 있음. 4번 순서를 역순으로 바꾼다는 의미.
1 2 : 1번부터 2번까지 순서를 역순으로 바꿈. 2 1 3 4 5
3 4 : 3번부터 4번까지 순서를 역순으로 바꿈. 2 1 4 3 5
1 4 : 1번부터 4번까지 순서를 역순으로 바꿈. 3 4 1 2 5
2 2 : 그대로. 3 4 1 2 5 => 최종 출력 결과

 

문제 해결

 

우선 바구니의 개수 N과 역순으로 몇 번 바꾸는지를 나타내는 M을 입력 받고, 바구니 안에 숫자를 넣을 배열을 생성한다.

 

Scanner in = new Scanner(System.in);

int N = in.nextInt();
int M = in.nextInt();
int arr[] = new int[N+1] //인덱스와 바구니 안의 숫자를 맞추기 위해 N+1

 

그리고 배열 안에 순서대로 숫자 넣깅

 

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

 

★역순으로 바꿀 방법의 횟수 : M. 즉 역순으로 바꿀 범위 입력 받는 것과 역순으로 만드는 코드를 M번 반복하면 됨.★

 

for (int a = 0; a < M; a++) {
    int i = in.nextInt(); //i번 바구니부터
    int j = in.nextInt(); //j번 바구니까지
    
    for(int b = i; b <= j; b++) { i번 바구니부터 j번 바구니까지 역순으로 바꾸는 코드
    	int c = j--; //후위연산. 
        int temp = arr[b]; 
        arr[b] = arr[c];
        arr[c] = temp; //arr[b]와 arr[c]를 바꾸는 연산
    }
}

arr[b]와 arr[c]를 바꾸는 연산을 for문 조건에 맞을 동안 반복

 

그 후 최종 바구니에 들어있는 값을 출력해주면 끝

for (int i = 0; i < N; i++){
	System.out.println(arr[i] + " ");
}

 

 

최종 코드
import java.util.*;

public class Main{
	public static void main(String[] args) {
    	
        Scanner in = new Scanner(System.in);
        
        int N = in.nextInt();
        int M = in.nextInt();
        int arr[] = new int[N+1];
        
        for(int i = 1; i <= N; i++) {
            arr[i] = i;
        }
        
        for (int a = 0; a < M; a++) {
    		int i = in.nextInt(); //i번 바구니부터
    		int j = in.nextInt(); //j번 바구니까지
    
    		for(int b = i; b <= j; b++) { //i번 바구니부터 j번 바구니까지 역순으로 바꾸는 코드
    			int c = j--; //후위연산. 
        		int temp = arr[b]; 
        		arr[b] = arr[c];
        		arr[c] = temp; //arr[b]와 arr[c]를 바꾸는 연산
                }
            }
        
        for (int i = 0; i < N; i++){
			System.out.print(arr[i] + " ");
		}
    }
}

 

반응형

'백준 문제 풀이 > 1차원 배열' 카테고리의 다른 글

(#1546 Java) 평균  (0) 2023.08.12
(#3052 Java) 나머지  (0) 2023.08.09
(#5597 Java) 과제 안 내신 분..?  (0) 2023.08.09
(#10813 Java) 공 바꾸기  (0) 2023.08.08
(#10810 Java) 공 넣기  (0) 2023.08.04