본문 바로가기
PROGRAMMING/[C] Baekjoon Online Judge (BOJ)

[C/Baekjoon] 백준 10811번(4-9) : 바구니 뒤집기

by PIZA 2025. 1. 4.

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

 

#include <stdio.h>

int main() {
    //N개의 바구니를 M번 실행
    //바구니 만들기
    int N,M;
    scanf("%d %d",&N,&M);
    int ary[N+1];
    for(int l = 1; l<=N; l++) {
        ary[l] = l;
    }
    
    //바구니 바꾸기
    for(int k =1; k<=M; k++) {
        int i,j;
        scanf("%d %d",&i,&j);
        
        //i번째부터 j번째까지의 수를 역순으로
        while(i < j) { //만나기 전까지 수행한다
            //교환
            int dummy = ary[i];
            ary[i] = ary[j];
            ary[j] = dummy;
            
            i++; //한 칸 앞으로
            j--; //한 칸 뒤로
        }
    }
    
    for(int l = 1; l<=N; l++) {
        printf("%d ",ary[l]);
    }
    
    return 0;
}

 

 

[주목할만한 부분]

역순으로 뒤집는 방법을 살핀다.
처음(i, i+1, i+2 . . . 번째)과 끝(j, j-1, j-2 . . . 번째)을 짝지어서 자리를 바꾸는 방법이다.
//i번째부터 j번째까지의 수를 역순으로
        while(i < j) { //만나기 전까지 수행한다
            //교환
            int dummy = ary[i];
            ary[i] = ary[j];
            ary[j] = dummy;
            
            i++; //한 칸 앞으로
            j--; //한 칸 뒤로
        }​