2947번 : 나무 조각
문제 )
동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 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 = { 1, 2, 3, 4, 5 };
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
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 7600번 : 문자가 몇갤까 (C++) (0) | 2023.02.13 |
---|---|
[백준] 4592번 : 중복을 없애자 (C++) (0) | 2023.02.13 |
[백준] 5073번 : 삼각형과 세 변 (C++) (0) | 2023.02.12 |
[백준] 11109번 : 괴짜 교수 (C++) (0) | 2023.02.12 |
[백준] 11383번 : 뚊 (C++) (0) | 2023.02.12 |