[백준 29002] Космический корабль (C#, C++) - soo:bak
작성일 :
문제 링크
설명
보스의 힘이 다른 모든 적의 힘의 합과 같을 때, 보스를 마지막에 두는 처치 순서를 출력하는 문제입니다.
접근법
먼저 모든 적의 힘을 합산합니다. 보스는 자신의 힘이 전체 합의 절반과 같은 적입니다.
이후 보스를 찾아 마지막에 배치하고, 나머지는 임의 순서로 출력합니다.
Code
C#
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
using System;
using System.Text;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var parts = Console.ReadLine()!.Split();
var f = new long[n];
long sum = 0;
for (var i = 0; i < n; i++) {
f[i] = long.Parse(parts[i]);
sum += f[i];
}
var boss = 0;
for (var i = 0; i < n; i++) {
if (f[i] == sum - f[i]) {
boss = i;
break;
}
}
var sb = new StringBuilder();
for (var i = 0; i < n; i++) {
if (i == boss) continue;
sb.Append(f[i]);
sb.Append(' ');
}
sb.Append(f[boss]);
Console.WriteLine(sb.ToString());
}
}
C++
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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vll f(n);
ll sum = 0;
for (int i = 0; i < n; i++) {
cin >> f[i];
sum += f[i];
}
int boss = 0;
for (int i = 0; i < n; i++) {
if (f[i] == sum - f[i]) {
boss = i;
break;
}
}
bool first = true;
for (int i = 0; i < n; i++) {
if (i == boss) continue;
if (!first) cout << ' ';
cout << f[i];
first = false;
}
if (!first) cout << ' ';
cout << f[boss] << "\n";
return 0;
}