작성일 :

문제 링크

21185번 - Some sum

설명

연속된 정수 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;
}