문제 풀이

[백준] 10811번: 바구니 뒤집기 - JAVA (자바)

auyeol 2023. 5. 19. 17:45
728x90

 

문제

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

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

 

바구니의 개수 N, 시행횟수 M을 입력받은 뒤 정수 a,b를 입력받아서 b ~ a번째 바구니의 값을 바꾸는 문제이다.

 

입력                                    출력
5 4					3 4 1 2 5
1 2
3 4
1 4
2 2

 

5 4 5개의 바구니{1,2,3,4,5}, 4번 시행

1 2 > {2,1,3,4,5}

3 4 > {2,1,4,3,5}

1 4 > {3,4,1,2,5}

2 2 > {3,4,1,2,5}

------------------------------------------------------------------------------------------------------------------

 

 

풀이

{1, 2, 3, 4, 5, 6, 7, 8}인 바구니의 순서를 변경할 때

 

입력 값이 (1 8)이라고 예시를 들면

 

[a]               [b]

1번째 배열 - 8번째 배열 

2번째 배열 - 7번째 배열

3번째 배열 - 6번째 배열

4번째 배열 - 5번째 배열

 

a와 b는 서로의 값을 교환하며, a는 1 증가하고 b는 1 감소한다. 

b가 a보다 값이 큰 경우만 값을 교환하므로 while문의 조건을 a<b로 설정하였다.

 

 

 

(1) Scanner 사용 

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt(); // n개의 바구니
		int count = sc.nextInt(); // 시행 횟수

		int temp=0;
		
		int busket[] = new int[n]; 
		for(int i=0;i<busket.length;i++) {
			busket[i] = i+1;	
		}
		
		for(int i=0;i<count;i++) { 
			int a = sc.nextInt()-1; //1 > 0번째 배열
			int b = sc.nextInt()-1; //5 > 4번째 배열
			
			while(a<b) { 
				temp = busket[a]; 
				busket[a] = busket[b]; 
				busket[b] = temp; 
				a++;	
				b--;	
			}
		}
		sc.close();
		
		for(int i=0;i<busket.length;i++) {
			System.out.print(busket[i]+" ");
		}
		
		
	}
}

 

 

------------------------------------------------------------------------------------------------------------------

 

 

(2) BufferdReader 사용 

 

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


public class Main2 {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer strtk = new StringTokenizer(br.readLine()," ");
		
		int n = Integer.parseInt(strtk.nextToken());
		int count = Integer.parseInt(strtk.nextToken()); 
		
		int temp = 0;
		
		int busket[] = new int[n];
		for(int i=0;i<busket.length;i++) {
			busket[i] = i+1;
		}
		
		for(int i=0;i<count;i++) {
			strtk = new StringTokenizer(br.readLine()," ");
			
			int a = Integer.parseInt(strtk.nextToken())-1;
			int b = Integer.parseInt(strtk.nextToken())-1;
			
			while(a<b) {
				temp = busket[a];
				busket[a] = busket[b];
				busket[b] = temp;
				a++;
				b--;
			}
		}
		
		br.close();
		
		for(int i=0;i<busket.length;i++) {
			System.out.print(busket[i]+" ");
		}
		
	}
}

 

Scanner

 

 

BufferedReader

728x90