작성일 :

문제 링크

21313번 - 문어

설명

원형으로 앉은 문어들의 인접한 손 번호가 서로 다르도록 하면서 사전순으로 가장 앞서는 수열을 만드는 문제입니다.


접근법

인접한 두 항이 달라야 하고, 첫 항과 마지막 항도 달라야 합니다.

가장 작은 수부터 채우면 1, 2가 번갈아 나오며, N이 짝수면 이대로 완성됩니다.

N이 홀수면 마지막 값이 1이 되어 첫 값과 같아지므로, 마지막 항만 3으로 바꾸면 사전순 최소가 됩니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Text;

class Program {
  static void Main() {
    var n = int.Parse(Console.ReadLine()!);
    var sb = new StringBuilder();
    for (var i = 0; i < n; i++) {
      var v = (n % 2 == 1 && i == n - 1) ? 3 : (i % 2 == 0 ? 1 : 2);
      if (i > 0) sb.Append(' ');
      sb.Append(v);
    }
    Console.WriteLine(sb.ToString());
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;
  for (int i = 0; i < n; i++) {
    int v = (n % 2 == 1 && i == n - 1) ? 3 : (i % 2 == 0 ? 1 : 2);
    if (i) cout << " ";
    cout << v;
  }
  cout << "\n";

  return 0;
}