CodingTest/Baekjoon

[baekjoon] 백준 2810번(파이썬): 컵 홀더

JunJangE 2021. 6. 2. 16:19

문제

 

2810번: 컵홀더

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

www.acmicpc.net

- 강산이네 동네에 드디어 극장이 생겼고, 강산이는 극장에 놀러 갔다.

- 매점에서 콜라를 산 뒤, 자리에 앉은 강산이는 큰 혼란에 빠졌다.

- 양쪽 컵홀더를 이미 옆 사람들이 차지했기 때문에 콜라를 꽂을 컵 홀더가 없었기 때문이다.

- 강산이는 극장에 다시 왔을 때는 꼭 콜라를 컵 홀더에 놓겠다는 다짐을 한 후 집에 돌아갔다.

- 극장의 한 줄에는 자리가 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

 

junjange/CodingTest

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com