작성일 :

문제 링크

19771번 - Сапсан

설명

좌석은 2인 1열이 n/2개 있습니다. 사람을 앉혀서 정확히 절반만 이웃을 가지게 할 때, 앉힐 수 있는 최대 인원을 구하는 문제입니다.

한 열에 두 명이 앉으면 둘 다 이웃이 있고, 한 명만 앉으면 이웃이 없습니다.


접근법

먼저, 가득 찬 열이 x개면 2x명이 앉고 모두 이웃이 있습니다. 한 명만 앉은 열이 y개면 y명이 앉고 이웃이 없습니다.

다음으로, 정확히 절반만 이웃을 가지려면 2x = (2x + y) / 2이어야 합니다. 이를 정리하면 y = 2x입니다.

이후, 사용 열 수 x + y = 3x가 n/2 이하여야 하므로 x는 n/6 이하입니다. 총 인원 2x + y = 4x이므로 최대 인원은 4 × (n / 6)입니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var n = long.Parse(Console.ReadLine()!);
      var ans = 4 * (n / 6);
      Console.WriteLine(ans);
    }
  }
}

C++

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

typedef long long ll;

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

  ll n; cin >> n;
  ll ans = 4 * (n / 6);
  cout << ans << "\n";

  return 0;
}