본문 바로가기
Develop/백준 (Cpp)

[백준] 2947번 : 나무 조각 (C++)

by Tarra 2023. 2. 12.

2947번 : 나무 조각


문제 )

동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다. 또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다.

동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다.

  1. 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  2. 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  3. 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  4. 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
  5. 만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.

처음 조각의 순서가 주어졌을 때, 위치를 바꿀 때 마다 조각의 순서를 출력하는 프로그램을 작성하시오.

 

입력 :

첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

 

 

출력 :

두 조각의 순서가 바뀔때 마다 조각의 순서를 출력한다.

 

 

 

 

 

 

풀이)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
void print(vector<int> vec) {
    for (auto& ele : vec) {
        cout << ele << " ";
    }
    cout << "\n";
}
 
int main()
{
    // 입력 받기
    vector<int> vec;
    vector<int> compare = { 12345 };
    int num;
    for (int i = 0; i < 5; i++) {
        cin >> num;
        vec.push_back(num);
    }
 
    while (1) {
        if (vec[0> vec[1]) {
            swap(vec[0], vec[1]);
            print(vec);
        }
 
        if (vec[1> vec[2]) {
            swap(vec[1], vec[2]);
            print(vec);
        }
 
        if (vec[2> vec[3]) {
            swap(vec[2], vec[3]);
            print(vec);
        }
 
        if (vec[3> vec[4]) {
            swap(vec[3], vec[4]);
            print(vec);
        }
 
        if (vec == compare) {
            break;
        }
    }
 
    return 0;
}
 
cs

출처 : https://www.acmicpc.net/problem/2947 

 

2947번: 나무 조각

첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

www.acmicpc.net