백준 코딩테스트/그리디(Greedy)

2810번: 컵홀더 (8 / 12) - 브론즈 1

monkeykim 2024. 10. 7. 00:39

문제

십년이면 강산이 변한다.

강산이네 동네에 드디어 극장이 생겼고, 강산이는 극장에 놀러갔다. 매점에서 콜라를 산 뒤, 자리에 앉은 강산이는 큰 혼란에 빠졌다. 양쪽 컵홀더를 이미 옆 사람들이 차지했기 때문에 콜라를 꽂을 컵 홀더가 없었기 때문이다. 영화를 보는 내내 콜라를 손에 들고 있던 강산이는 극장에 다시 왔을 때는 꼭 콜라를 컵 홀더에 놓겠다는 다짐을 한 후 집에 돌아갔다.

극장의 한 줄에는 자리가 N개가 있다. 서로 인접한 좌석 사이에는 컵홀더가 하나씩 있고, 양 끝 좌석에는 컵홀더가 하나씩 더 있다. 또, 이 극장에는 커플석이 있다. 커플석 사이에는 컵홀더가 없다.

극장의 한 줄의 정보가 주어진다. 이때, 이 줄에 사람들이 모두 앉았을 때, 컵홀더에 컵을 꽂을 수 있는 최대 사람의 수를 구하는 프로그램을 작성하시오. 모든 사람은 컵을 한 개만 들고 있고, 자신의 좌석의 양 옆에 있는 컵홀더에만 컵을 꽂을 수 있다.

S는 일반 좌석, L은 커플석을 의미하며, L은 항상 두개씩 쌍으로 주어진다.

어떤 좌석의 배치가 SLLLLSSLL일때, 컵홀더를 *로 표시하면 아래와 같다.

*S*LL*LL*S*S*LL*

위의 예에서 적어도 두 명은 컵홀더를 사용할 수 없다.

입력

첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다.

출력

컵을 컵홀더에 놓을 수 있는 최대 사람의 수를 출력한다.

예제 입력 1

3
SSS

예제 출력 1

3

예제 입력 2

4
SLLS

예제 출력 2

4

예제 입력 3

9
SLLLLSSLL

예제 출력 3

7

코드

# n개의 자리를 입력 받음
n = int(input())

# 자리 입력
input_seat = input()

# holder 카운트
holder_count = 0
# L 카운트
l_count = 0

for seat in input_seat:
    if seat == 'S':
        holder_count += 1
    else:
        l_count += 1

# 맨 오른쪽 자리에 홀더가 하나가 더 있어 1을 더한다.
holder_count += int(l_count / 2) + 1

if n >= holder_count:
    print(holder_count)
else:
    print(n)

코드 풀이

  1. input_seat를 반복하여 한 글자씩 반복한다.
    • ‘S’ 가 있으면 holder_count에 1씩 더한다.
    • 그 외 ‘L’이 있으면 l_count에 1씩 더한다.
  2. LL도 S와 마찬가지로 컵홀더는 왼쪽에 하나만 있다고 계산을 한다.
    • 따라서 L의 개수 나누기 2를 하고 맨 오른쪽 컵홀더가 있으므로 + 1을 하면 LL의 컵홀더 개수가 나온다.
    • *LL*LL*LL* 일 경우
      • L의 개수는 6
      • 홀더 개수는 (6 / 2) + 1 → 4가 된다.
  3. 좌석이 홀더보다 크거나 같다면
    홀더 개수만큼만 이용가능
  4. 좌석이 홀더보다 작다면
    좌석 개수만큼만 이용가능

핵심 포인트

  1. string.count(' ') 메서드를 사용하면 string에서 인자로 들어간 string의 개수를 세어준다.
  2. 컵홀더 개수 구하기
    • 컵홀더는 좌석당 왼쪽에 하나씩 있다고 생각하기
    • 맨 오른쪽에 컵홀더가 한 개가 더 있으므로 +1을 해주기
    • LL 좌석도 S좌석과 마찬가지로 왼쪽에 컵홀더가 하나씩 있다고 생각하기
  3. SLLLLSSLL의 예제
    • *S*LL*LL*S*S*LL* → 컵홀더 7개
    • 좌석이 컵홀더보다 크거나 같은 경우 (9 ≥ 7)
      컵홀더가 자리만큼 없으므로 최대로 이용 가능한 개수는 컵홀더의 개수가 된다.
  4. SSS의 예제
    • *S*S*S* → 컵홀더 4개
    • 좌석이 컵홀더보다 작은 경우
      컵홀더가 남으므로 최대로 이용 가능한 개수는 좌석의 개수가 된다.