[백준 21185] Some sum (C#) - soo:bak
작성일 :
문제 링크
설명
연속된 정수 n 개의 합이 짝수 인지, 홀수 인지, 둘 다 가능한 지 를 판별하는 문제입니다.
만약, 입력으로 주어지는 n 이 홀수라면,
[ 짝수, 홀수, ..., 짝수 ] 또는 [ 홀수, 짝수, ..., 홀수 ] 의 두 가지 경우가 가능합니다.
따라서, 짝수의 개수와 홀수의 개수가 항상 다르며,
결국 중간값이 홀수인지, 짝수인지에 따라서 누적합의 홀수/짝수 여부가 결정됩니다.
즉, 이 경우 누적합은 중간값에 의존하기 때문에,
문제의 조건만으로는 누적합의 홀수/짝수 여부를 확인할 수 없습니다.
- 예시
[ 2 3 4 ]: 중간값3홀수, 누적합9홀수
[ 3 4 5 ]: 중간값4짝수, 누적합12짝수
[ 2 3 4 5 6 ]: 중간값4짝수, 누적합20짝수
[ 3 4 5 6 7 ]: 중간값5홀수, 누적합25홀수
한편, 입력으로 주어지는 n 이 짝수라면,
[ 짝수, 홀수, ..., 짝수, 홀수 ] 또는 [ 홀수, 짝수, ..., 홀수, 짝수 ] 의 두 가지 경우 모두에서
항상 짝수의 개수도 짝수 개, 홀수의 개수도 짝수 개 로 이루어집니다.
따라서, 가우스의 덧셈 법칙 을 활용하여 동일 합 을 이루는 원소 쌍들을 만들 수 있습니다.
이 때, 만약 원소 쌍 의 개수가 짝수라면, 동일 합 이 짝수 개라는 것을 의미하므로 누적합도 짝수,
원소 쌍 의 개수가 홀수라면, 동일 합 이 홀수 개라는 것을 의미하므로 누적합도 홀수가 됩니다.
- 예시
[ 2 3 4 5 ]:(2 + 5),(3 + 4)의 동일 합7의 원소쌍이 짝수 개, 누적합7 * 2=14
[ 2 3 4 5 6 7]:(2 + 7),(3 + 6),(4 + 5)의 동일 합9의 원소쌍이 홀수 개, 누적합9 * 3=27
이 때, 동일합 원소쌍의 개수는 n / 2 개 이므로,
n / 2 이 홀수인지, 짝수인지에 따라서 누적합의 홀수/짝수 여부를 확인할 수 있습니다.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace Solution {
class Program {
static void Main(string[] args) {
int.TryParse(Console.ReadLine(), out int n);
string ans = "Either";
if (n % 2 == 0) {
if ((n / 2) % 2 == 1) ans = "Odd";
else ans = "Even";
}
Console.WriteLine(ans);
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string ans = "Either";
if (n % 2 == 0) {
if ((n / 2) % 2 == 1) ans = "Odd";
else ans = "Even";
}
cout << ans << "\n";
return 0;
}