본문 바로가기
알고리즘/문제

[백준] 10804. 카드 역배치 <C++>

by 코드 이야기 2020. 4. 14.
728x90

www.acmicpc.net/problem/10804

 

10804번: 카드 역배치

1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. 

www.acmicpc.net

 

 

방법1)

- 스택을 이용해 뒤집어준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <stack>
using namespace std;
 
int main() {
  int a, b, arr[21];
  stack<int> s;
 
  for(int i=1; i<=20; i++)  //20개의 숫자를 입력 받는다
    arr[i]=i;
  
  for(int i=0; i<10; i++) {
    cin>>a>>b;  //어디부터 어디까지 뒤집을지 받는다
 
    for(int j=a;j<=b;j++) {  //a~b구간을 스택에 옮겨준다
      s.push(arr[j]);
    }
 
    for(;a<=b;a++) {  //스택에서 다시 옮긴다
      arr[a]=s.top();
      s.pop();
    }
  }
 
  for(int i=1; i<=20; i++)  //출력
    cout<<arr[i]<<" ";
 
}
cs

 

 

 

 

방법2)

- reverse함수를 이용해 뒤집어준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <algorithm>
#include <iostream>
using namespace std;
 
int main() {
  int arr[22], a, b;
  
  for(int i=1; i<=20; i++
    arr[i]=i;
 
  for(int i=0; i<10; i++) {
    cin >> a >> b;
    reverse(arr+a, arr+b+1);
  }
 
  for(int i=1; i<=20; i++)
    cout << arr[i] << ' ';
}
cs

 

 

 

그 외에는 그냥 배열과 배열의 인덱스만을 이용해 뒤집어주는 등의 방법도 있다.

 

 

 

728x90

댓글