메모리: 2020 KB, 시간: 0 ms
애드 혹, 수학
2024년 12월 15일 23:54:58
길이가 인 수열의 번째 원소를 정수 라고 하자. 동훈이는 이 수열을 잘 정렬해서 홀짝 수열로 만들고 싶다. 어떤 수열이 홀짝 수열이 되려면 다음 조건을 만족해야 한다.
다음과 같은 수열은 홀짝 수열이다. 그러나 다음과 같은 수열은 홀짝 수열이 아니다.
의 홀수번째 원소들을 순서대로 나열하면 인데, 감소하기 때문에 홀짝 수열이 아니다.
는 첫 번째 원소가 홀수가 아니므로 홀짝 수열이 아니다.
의 짝수번째 원소들을 순서대로 나열하면 인데, 감소하기 때문에 홀짝 수열이 아니다.
길이 의 수열 이 주어졌을 때, 이 수열을 잘 정렬한다면 홀짝 수열로 만드는 것이 가능할까?
첫째 줄에 수열의 길이 이 주어진다.
둘째 줄에 이 주어진다. 수열의 번째 원소는 정수 이다.
주어진 수열을 잘 정렬해서 홀짝 수열로 만들 수 있다면 1을, 어떻게 정렬하더라도 홀짝 수열로 만들 수 없다면 0을 출력한다.
문제 풀이
그냥 수열 개수로 정할 수 있다. 시작이 1이므로 홀수가 같거나 1커야하고 이를 전체 길이 홀짝 나눠서 생각해보자. 길이가 짝수면 홀짝 딱 맞게 진행되므로 odd-even이 0이고, 길이가 홀수면 홀수가 1개 많으므로 odd-even==1이다!
코드
/** * Author: nowalex322, Kim HyeonJae */ #include <bits/stdc++.h> using namespace std;
// #define int long long
#define MOD 1000000007
#define INF LLONG_MAX
#define ALL(v) v.begin(), v.end()
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
void solve() {
int N, odd = 0, even = 0;
cin >> N;
for (int i = 0; i < N; i++) {
int num;
cin >> num;
if (num % 2 == 0)
even++;
else
odd++;
}
int res = 0;
if (N % 2 == 0) {
res = odd == even ? 1 : 0;
} else {
res = odd - even == 1 ? 1 : 0;
}
cout << res << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int tt = 1; // 기본적으로 1번의 테스트 케이스를 처리
// cin >> tt; // 테스트 케이스 수 입력 (필요 시)
while (tt--) {
solve();
}
return 0;
}