
N : 한 줄에 있는 좌석의 수 (1 ≤ N ≤ 50)
seats : 한 줄의 자리 정보 (S: 일반 좌석 / L: 커플석)
✅ 입력 조건
1. 첫번째 줄 : 좌석의 수 입력
2. 두번째 줄 : 좌석 정보 N개를 입력
3. L은 항상 2개씩 쌍으로 입력
✅ 출력 조건
1. 컵홀더를 쓸 수 있는 최대 사람의 수 출력
(❗️주의: 굳이 이렇게 풀어야 하나 싶은 복잡한 풀이로 작성...)
입력받은 좌석의 정보를 하나씩 S인지 L인지 확인하면서 문제에서 예처럼 컵홀더 위치를 넣어주고 개수를 세면 되겠다고 생각했다.
그래서 리스트의 요소를 읽고 다른 리스트에 컵홀더 정보와 함께 넣어준 후, 컵홀더를 의미하는 *의 개수를 세고 그 개수가 N보다 크면 -1 해주는(S만 있는 경우) 방식으로 구현했다.
좌석 정보 입력받아 리스트화 →
while 루프를 통해 좌석 정보 처리 →
for 루프로 컵홀더 개수 계산 →
최종 시간복잡도
으로 제한 시간 내에 연산이 가능하다.
while루프를 활용해 좌석 정보와 컵홀더 정보를 리스트에 추가하고,
for루프로 컵홀더 개수 계산하기.
import sys
from collections import deque
input = sys.stdin.readline
# 1. N 입력
N = int(input())
# 2. 좌석 정보 입력
info = list(str(input().rstrip()))
# 3. 컵홀더 포함한 좌석 정보 입력할 큐 선언
seats = deque()
# 4. 맨 첫번째 컵홀더 추가
seats.append('*')
# 5. 입력받은 좌석 정보를 돌면서 컵홀더 추가
while info:
seat = info.pop()
if seat == 'S':
seats.append(seat)
seats.append('*')
elif seat == 'L':
info.pop()
seats.append('LL')
seats.append('*')
# 6. 컵홀더 개수 세기
count = 0
for s in seats:
if s == '*':
count += 1
# 7. L이 없는 경우
if count > N:
print(count - 1)
# 8. L이 있는 경우
else:
print(count)

import sys
N = int(input())
info = input().rstrip()
count = info.count('LL')
if count <= 1 :
print(N)
else:
print(N - count + 1)

S, L을 찾는 문제라고만 생각해서 단순히 하나하나 비교하고 계산하는 식으로 풀려고 했다.문자열.count(): ()안의 문자가 문자열 내에 몇 개인지 계산