반응형
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
문제 접근 방법
- 일곱 난쟁이의 키의 합이 100이 되어야 한다.
- 전체 난쟁이의 키의 합을 구한뒤, 2명의 키를 빼서 100이 되는 경우를 구하면 된다.
아래는 코드입니다.
일반 배열과 vector를 사용하여 푼 방법 2가지가 있습니다.
문제의 푸는 방식은 거의 동일합니다.
일반 배열을 사용한 첫 번째 코드입니다.
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
|
#include <iostream>
#include <algorithm>
using namespace std;
int num[9];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int sum = 0;
for (int i = 0; i < 9; i++)
{
cin >> num[i];
sum += num[i];
}
sort(num, num + 9);
for (int i = 0; i < 9; i++)
{
for (int j = i + 1; j < 9; j++)
{
if (sum - num[i] - num[j] == 100) // 정답에 해당하는 조건을 찾았을 때
{
for (int k = 0; k < 9; k++)
{
if (k == i || k == j) // 해당하는 num[i], num[j]는 출력을 하지 않음
{
continue;
}
cout << num[k] << "\n";
}
return 0;
}
}
}
return 0;
}
Colored by Color Scripter
|
vector를 사용한 두 번째 코드입니다.
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
|
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int sum = 0;
vector<int> vec;
for (int i = 0; i < 9; i++)
{
int a;
cin >> a;
vec.push_back(a);
sum += a;
}
sort(vec.begin(), vec.end());
for (int i = 0; i < 9; i++)
{
for (int j = i + 1; j < 9; j++)
{
if ((sum - vec[i] - vec[j]) == 100)
{
if (i > j) // 조건을 만족한 위치를 찾아 vector에서 제거합니다.
{ // 뒤쪽 벡터값부터 제거합니다.
vec.erase(vec.begin() + i);
vec.erase(vec.begin() + j);
}
else
{
vec.erase(vec.begin() + j);
vec.erase(vec.begin() + i);
}
for (int k = 0; k < vec.size(); k++)
{
cout << vec[k] << "\n";
}
return 0;
}
}
}
return 0;
}
Colored by Color Scripter
|
반응형
'백준 문제풀이 > BRONZE' 카테고리의 다른 글
[백준 / BOJ / BRONZE 1] 설탕 배달 (C++) (0) | 2021.12.25 |
---|