문제
- 강산이네 동네에 드디어 극장이 생겼고, 강산이는 극장에 놀러 갔다.
- 매점에서 콜라를 산 뒤, 자리에 앉은 강산이는 큰 혼란에 빠졌다.
- 양쪽 컵홀더를 이미 옆 사람들이 차지했기 때문에 콜라를 꽂을 컵 홀더가 없었기 때문이다.
- 강산이는 극장에 다시 왔을 때는 꼭 콜라를 컵 홀더에 놓겠다는 다짐을 한 후 집에 돌아갔다.
- 극장의 한 줄에는 자리가 N개가 있다.
- 서로 인접한 좌석 사이에는 컵홀더가 하나씩 있고, 양 끝 좌석에는 컵홀더가 하나씩 더 있다.
- 또, 이 극장에는 커플석이 있다. 커플석 사이에는 컵홀더가 없다.
- 극장의 한 줄의 정보가 주어진다.
- 이때, 이 줄에 사람들이 모두 앉았을 때, 컵홀더에 컵을 꽂을 수 있는 최대 사람의 수를 구하는 문제이다.
- 모든 사람은 컵을 한 개만 들고 있고, 자신의 좌석의 양 옆에 있는 컵홀더에만 컵을 꽂을 수 있다.
- S는 일반 좌석, L은 커플석을 의미하며, L은 항상 두 개씩 쌍으로 주어진다.
- 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50)
알고리즘
- 자리의 수를 입력받는다.
- 자석의 정보를 입력받는다.
- 자석의 정보에서 커플석의 정보를 카운트한다.
- 커플석이 1개 이하이면 모든 사람이 컵홀더를 사용할 수 있기 때문에 자리의 수를 그대로 출력한다.
- 커플석이 2개 이상이면 커플석에 앉아 있는 사람중 한 커플을 제외하고 모든 커플 중 1명은 컵홀더를 사용할 수 없게 된다.
코드
import sys
n = int(sys.stdin.readline())
seat = input()
# 커플석을 모두 카운트한다.
cnt = seat.count('LL')
# 커플석의 수에 따라 결과가 달라짐
if cnt <= 1:
# 커플석이 1개보다 작거나 같을 때 모든 사람이 컴홀더를 사용 할 수 있다.
print(n)
else:
# 커플석이 2개 이상이면 전체 좌석에서 커플석을 빼고 +1을 해준다.
print(n - cnt + 1)
결과
코드를 분석하게되면 커플석이 1개 이하일 때 모든 사람은 컵홀더를 사용할 수 있기 때문에 컵홀더를 사용할 수 있는 최대 사람의 수는 모든 사람이 된다. 다음으로 나머지 커플석이 2개 이상인 경우에 한 커플을 제외한 나머지 커플 중 1명씩은 컵홀더를 사용할 수 없게 된다. 따라서 모든 사람 중 커플 수를 카운트한 값을 빼고 그중에 1을 더한 값이 컵홀더를 사용할 수 있는 최대 사람의 수가 된다.
그런데 위 코드에서 if cnt <= 2: 를 해도 정답처리가 되는 것을 확인할 수 있다. 처음에는 맞다고 생각했지만 커플석이 2개인 경우인 LLLL일 때 컵홀더를 사용할 수 있는 사람의 수는 3이지만 출력은 4가 나오게 된다. 이러한 오류가 있으니 참고하고 문제를 풀면 좋을 것 같다.
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 9576번(파이썬): 책 나눠주기 (0) | 2021.06.04 |
---|---|
[baekjoon] 백준 2812번(파이썬): 크게 만들기 (0) | 2021.06.03 |
[baekjoon] 백준 11000번(파이썬): 강의실 배정 (0) | 2021.06.01 |
[baekjoon] 백준 10775번(파이썬): 공항 (0) | 2021.05.30 |
[baekjoon] 백준 1700번(파이썬): 멀티탭 스케줄링 (0) | 2021.05.28 |