백준/c

백준_10811_바구니뒤집기

S0LL 2024. 4. 24. 22:45

 

바로 이전에 풀었던 10810_공넣기 문제의 응용 버전입니다.

 

바구니의 개수와 움직일 횟수를 받는 것 까지는 동일하지만, 

이 문제에서는 입력받은 범위의 바구니를 역순으로 바꾸어야 합니다. 

 

바구니를 역순으로 바꾸기 위해서, 임시 배열을 만들고 0으로 초기화까지 해주었습니다.

int temp[N];       
for (int s = 0; s < N; s++)
{
    temp[s] = 0;
}

 

 

그다음, 바구니의 범위 (i,j) 를 입력받아 임시 배열에 역순으로 저장해주었습니다.

scanf("%d %d", &i, &j);
for (int q = 0; q < j - i + 1; q++)
{
    temp[i - 1 + q] = basket[j - 1 - q];
}

 

 

마지막으로, 임시 배열에 있는 역순을 바구니 배열에 넣으면 

입력받은 i ~ j 범위의 바구니가 역순으로 바뀌게 되는 것이죠.

for (int r = i - 1; r < j; r++)
{
    basket[r] = temp[r];
}

 

 

 

이 과정을 첫 번째 줄에서 입력받은 M번 반복하면 문제 해결입니다.

 

전체 코드)

#include <stdio.h>

int main(void)
{
    int N = 0, M = 0;
    scanf("%d %d", &N, &M);

    // 바구니 배열 생성 및 번호 부여
    int basket[N];
    for (int i = 0; i < N; i++)
    {
        basket[i] = i + 1;
    }

    int temp[N];
    int i = 0, j = 0;
    for (int p = 0; p < M; p++)
    {
        for (int s = 0; s < N; s++)
        {
            temp[s] = 0;
        }

        scanf("%d %d", &i, &j);
        for (int q = 0; q < j - i + 1; q++)
        {
            temp[i - 1 + q] = basket[j - 1 - q];
        }

        for (int r = i - 1; r < j; r++)
        {
            basket[r] = temp[r];
        }
    }

    for (int s = 0; s < N; s++)
    {
        printf("%d ", basket[s]);
    }

    printf("\n");

    return 0;
}

 

이와 같이 잘 실행되는 모습입니다.

 

임시 배열 말고 임시 변수를 만들어서도 풀 수 있을 것 같지만, 배열이 한꺼번에 처리하기 좋아 배열로 해결했습니다.

 

'백준 > c' 카테고리의 다른 글

백준_2869_달팽이는올라가고싶어  (2) 2024.04.28
백준_1259_팰린드롬수  (0) 2024.04.25
백준_10810_공넣기  (0) 2024.04.24
백준_25304_영수증  (0) 2024.04.24
백준_15829_Hashing  (0) 2024.04.23