Algorithm_PS

백준_10811 (바구니 뒤집기)

Frisbeen 2023. 10. 16. 18:52

10811번: 바구니 뒤집기 (acmicpc.net)

 

10811번: 바구니 뒤집기

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

www.acmicpc.net

문제는 간단하다. 바구니의 숫자는 기본적으로 1,2,3,4 순서대로 설정되어있다는 것. - 첫번째 포인트

두 숫자를 입력받으면 그 숫자의 범위대로 바구니의 순서를 reverse한다. - 두번째 포인트

이 두가지를 집중해서 코드를 짜면 되겠다고 생각했다.

 

 첫번째 포인트는 for문으로 그냥 1번 인덱스에는 1, 2번엔 2 .. 이런식으로 설정하면 끝

 

 두번째 포인트가 관건이다. array에서 순서를 바꾸는것은 그렇게 어렵지가 않다는 것을 잘 알수있다. 바로 temp 변수를 활용하여 순서를 바꾸고는 하는데, 여기서는 범위내에있는 순서를 계속 바꿔야한다.

즉 temp 변수를 활용하는것을 여러번 해야한다는 것이 포인트이다. 여러번 할때의 조건은 바뀔 인덱스의 위치가 왼쪽 인덱스가 오른쪽 인덱스보다 작은 상태여야한다는 것이다.

 

상태에 만족하는 반복문? while이 조금 더 적합하다고 판단하였고 while 반복문과 temp변수를 활용한 순서바꾸기가 핵심이겠다.

 

여기서 끝나면 안되겠다. 마지막 포인트는 2 2 와 같이 같은 인덱스를 줬을때는? 의미가 딱히 없겠다. 따라서 이는 조건문에 따로 달아두어 어떠한 기능도 하지않게 control 하면 문제는 끝

 

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int 바구니 = sc.nextInt();
		int 횟수 = sc.nextInt();
		int[] arr = new int[바구니+1];
		//바구니에 숫자주기. default.
		for(int i=1; i<=바구니; i++) {
			arr[i] = i;
		}
		
		// 
		for(int i=0; i<횟수; i++) {
			int first = sc.nextInt();
			int last =  sc.nextInt();
			//2,2일 경우 굳이 바꿀 필요가 x
			if(first == last) {
				continue;
			}
			else {
				while(first<last) {
					int temp = arr[first];
					arr[first] = arr[last];
					arr[last] = temp;
					first++;
					last--;
					
				}
			}
			
			
		
		

	}
		for(int i=1; i<바구니+1; i++) {
			System.out.print(arr[i]+" ");
		}
		sc.close();

}

'Algorithm_PS' 카테고리의 다른 글

백준_2745 <진법 변환>  (1) 2023.10.26
백준_2563 <색종이>  (0) 2023.10.20
백준_10798(세로읽기)  (0) 2023.10.19
백준_2941(크로아티아 알파벳)  (0) 2023.10.18
백준_25206 (너의 평점은)  (1) 2023.10.16