[백준 19771] Сапсан (C#, C++) - soo:bak
작성일 :
문제 링크
설명
좌석은 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;
}