[백준 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;
}