[백준 31312] Water Journal (C#, C++) - soo:bak
작성일 :
문제 링크
설명
기록된 n-1개의 값과 전체 최소값 a, 최대값 b가 주어질 때, 누락된 하루의 가능한 물 섭취량을 모두 출력하는 문제입니다.
접근법
기록된 값들에 최소값과 최대값이 있는지 확인합니다. 둘 다 존재하면 누락 값은 최소값부터 최대값 사이 어떤 값이든 가능합니다.
최소값만 없으면 누락 값은 최소값이어야 하고, 최대값만 없으면 최대값이어야 합니다. 둘 다 없으면 불가능이므로 -1을 출력합니다.
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
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var first = Console.ReadLine()!.Split();
var n = int.Parse(first[0]);
var a = int.Parse(first[1]);
var b = int.Parse(first[2]);
var hasA = false;
var hasB = false;
for (var i = 0; i < n - 1; i++) {
var w = int.Parse(Console.ReadLine()!);
if (w == a) hasA = true;
if (w == b) hasB = true;
}
var res = new List<int>();
if (hasA && hasB) {
for (var v = a; v <= b; v++)
res.Add(v);
} else if (!hasA && hasB) res.Add(a);
else if (hasA && !hasB) res.Add(b);
if (res.Count == 0) Console.WriteLine(-1);
else Console.WriteLine(string.Join(" ", res));
}
}
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
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, a, b; cin >> n >> a >> b;
bool hasA = false, hasB = false;
for (int i = 0; i < n - 1; i++) {
int w; cin >> w;
if (w == a) hasA = true;
if (w == b) hasB = true;
}
vi res;
if (hasA && hasB) {
for (int v = a; v <= b; v++)
res.push_back(v);
} else if (!hasA && hasB) res.push_back(a);
else if (hasA && !hasB) res.push_back(b);
if (res.empty()) cout << -1 << "\n";
else {
for (int i = 0; i < (int)res.size(); i++) {
if (i) cout << " ";
cout << res[i];
}
cout << "\n";
}
return 0;
}