on my way

[GDSC Week0-2] 백준 10804번:: 카드역배치 (C++) 본문

algorithm/C++

[GDSC Week0-2] 백준 10804번:: 카드역배치 (C++)

wingbeat 2021. 9. 26. 17:12
반응형

 

 

* 문제를 풀기 위해 생각한 아이디어

벡터를 선언하고, reverse함수를 통해 해당 구간을 뒤집는다.

 

 

* 코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main(int argc, char const *argv[]){
	ios::sync_with_stdio(false); 
    cin.tie(NULL); cout.tie(NULL);
    
    int start, end;

    vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    for(int i=0; i<10; i++){
        cin >> start >> end;
        reverse(v.begin()+start-1, v.begin()+end);
    }
    
    for(int i=0; i<v.size(); i++){
        cout << v[i] << ' ';
    }

}

 

 

* 어떻게 풀었는지

1. vector를 선언한다.

2. 입력받기와 reverse를 10번 반복하는 for문을 선언한다.

3. for문으로 vector size만큼 모든 vector를 출력한다.

 

 

* 회고

1. 단순히 reverse 범위를 v.begin()+start 부터 v.begin()+end로 설정했는데 오류가 났다.

다시 생각해보니 시작 구간이 원래 0번인데 '1번째'로 들어가기 때문에 reverse를 할 때 start에서 1을 빼주어야 겠다고 생각했고, 코드를 돌려보니 답이 맞았다.

 

 

* 문제 링크

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

 

10804번: 카드 역배치

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

www.acmicpc.net

 

반응형