바로 이전에 풀었던 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 |