작성일 :

문제 링크

2810번 - 컵홀더

설명

일반석(S)은 좌석 양옆에 컵홀더가 하나씩 있지만, 커플석(L)은 두 좌석 사이 컵홀더가 없어서 한 쌍이 끝 양쪽 홀더를 공유합니다. 모든 관객이 컵을 한 개씩 둘 때, 컵홀더를 쓸 수 있는 최대 인원을 구합니다.


접근법

모든 좌석이 일반석이면 N명에 대해 N+1개의 컵홀더가 있어 모두 사용할 수 있습니다. 하지만 커플석 한 쌍은 두 사람 사이에 컵홀더가 없으므로, 커플석 쌍 하나당 컵홀더가 하나씩 줄어듭니다.

L의 개수를 세어 2로 나누면 커플석 쌍의 수가 됩니다. 컵홀더 수는 N + 1에서 커플석 쌍 수를 뺀 값이고, 컵홀더를 사용할 수 있는 사람 수는 이 값과 N 중 작은 값입니다.



Code

C#

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

class Program {
  static void Main() {
    var n = int.Parse(Console.ReadLine()!);
    var seats = Console.ReadLine()!;

    var lCount = 0;
    foreach (var ch in seats)
      if (ch == 'L') lCount++;

    var couples = lCount / 2;
    var holders = n - couples + 1;
    var ans = Math.Min(n, holders);
    Console.WriteLine(ans);
  }
}

C++

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

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

  int n; cin >> n;
  string s; cin >> s;
  int lCount = 0;
  for (char c : s)
    if (c == 'L') lCount++;
  int couples = lCount / 2;
  int holders = n - couples + 1;
  int ans = min(n, holders);
  cout << ans << "\n";

  return 0;
}