fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. int arr[5000];
  7. int arr2[5000];
  8. // 주어진 숫자배열의 모든 숫자의 위치가 기존의 자기자신의 위치가 아니게 되도록 바꾸는 문제
  9. int main()
  10. {
  11. ios_base::sync_with_stdio(false);
  12. cin.tie(NULL);
  13. int a;
  14. int b;
  15. int count = 0;
  16. int count2 = 0;
  17. cin >> a;
  18. int change = a;
  19. int tmp;
  20. for (int i = 0; i < a; i++) {
  21. cin >> b;
  22. arr[i] = b;
  23. arr2[i] = b;
  24. }
  25. // 정렬을 통한 숫자 교체 가속화
  26. sort(arr2, arr2 + a);
  27. // 같은숫자가 a/2+1개 이상인 숫자가있으면 교체불가 -1출력
  28. for (int i = 0; i < a; i++) {
  29. count2++;
  30. if (arr2[i] == arr2[i + 1]) {
  31. count++;
  32. if (count == a / 2) {
  33. cout << -1;
  34. return 0;
  35. }
  36. }
  37. else if (count2 > a / 2) {
  38. break;
  39. }
  40. else {
  41. count = 0;
  42. }
  43. }
  44. //정렬된 배열과 정렬되기 전 배열의 같은인덱스에 같은 숫자가 있다면 해당 숫자를 교체 가능한 곳을 찾아 옮김
  45. for (int n = 0; n < a; n++) {
  46. if (arr[n] == arr2[n]) {
  47. for (int i = 0; i < a; i++) {
  48. if (arr2[i] != arr2[n] && arr[i] != arr2[n]) {
  49. tmp = arr2[n];
  50. arr2[n] = arr2[i];
  51. arr2[i] = tmp;
  52. break;
  53. }
  54. }
  55. }
  56. }
  57.  
  58. for (int i = 0; i < a; i++) {
  59. cout << arr2[i] << ' ';
  60. }
  61. }
Success #stdin #stdout 0.01s 5316KB
stdin
8
1 1 2 2 2 2 3 3
stdout
2 2 1 1 3 3 2 2