코드
n = int(input()) # 좌석 수
seat = input() # 좌석 정보
couple = seat.count('LL') # 커플석의 개수
if couple <= 1:
print(n)
else:
print(n + 1 - couple)
영화관의 한 줄에는 자리가 N개 있고, 컵홀더는 양쪽에 하나씩 더 있다고 했으므로 한 줄에 있는 컵홀더의 개수는 N+1개이다.
우리가 가는 영화관을 생각해 보면 N+1을 쉽게 떠올릴 수 있다.
좌석 기준 오른쪽에 컵홀더가 있다고 하면 N개의 자리에는 N개의 컵홀더가 있고, 제일 왼쪽 자리에는 왼쪽에도 컵홀더가 있을 것이므로 N+1개가 된다.
이때, 커플석에는 좌석 사이에 컵홀더가 없다.
그럼 2개의 자리인 커플석 LL에는 '*LL*'처럼 컵홀더(*)가 있는 것이므로 L과 L사이에는 컵홀더가 없는 것을 알 수 있다.
커플석이 연속으로 있으면 어떻게 될까?
*LL*LL*LL*에서도 역시 LL사이에는 컵홀더가 없으므로 커플석(LL)의 개수만큼 컵홀더가 없다는 것을 알 수 있다.
그러므로, 총 컵홀더의 개수는 N + 1 - couple이 되고, N+1-couple명의 사람이 컵홀더를 사용할 수 있다.
하지만 이 식은 모든 경우에 해당되지 않는다.
만약 일반좌석만 있으면 이 식으로 컵홀더를 사용할 수 있는 최대 인원을 구할 수 있을까?
일반좌석 3개로만 이루어져 있다면 컵홀더는 *S*S*S*와 같이 있을 것이고 좌석은 3개이지만 컵홀더는 4개이다.
컵홀더의 개수는 같은 식으로 구할 수 있지만 최대 사용 인원은 구할 수 없다.
그래서 문제에서 예제 입력으로 커플석이 0개일 때와 1개일 때의 결과를 알려준 것 같다.
커플석이 0개일 경우에는 N개의 좌석이 존재할 때 컵홀더는 N+1개이지만, N명의 사람이 사용한다.
커플석이 1개일 경우에는 N개의 좌석의 존재할 때 컵홀더는 N+1-1개이고 N명의 사람이 사용할 수 있다.
즉, 커플석이 1개 이하일 경우에는 최대 N명의 사람이 컵홀더를 사용할 수 있다.
그러므로 조건에 따라 다른 출력을 할 수 있도록 해야 한다.
if couple <= 1:
print(n)
else:
print(n + 1 - couple)
커플석이 1개 이하이면 N을 그대로 출력하고, 커플석이 2개 이상이면 컵홀더의 개수(N+1-couple)를 출력한다.
코드를 작성하는 것은 어려운 문제는 아니지만, 생각해 내는 과정이 조금 어려웠다.