본문 바로가기

공부하는 것들/알고리즘

백준 2810 : 컵홀더(그리디)***

www.acmicpc.net/problem/2810

 

2810번: 컵홀더

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

www.acmicpc.net

 

양 끝의 사람은 무조건 바깥쪽 홀더를 사용해야 한다.

컵홀더에 컵을 꽂을 수 있는 최대 사람의 수

존재하는 컵홀더의 개수를 구한 다음에, 사람수와의 min값을 반환하면 된다

 

코너 테스트 케이스 :

5, SLLSS

1, S

if __name__=='__main__':
    N = int(input())
    seats = str(input())
    Ls = seats.split('S') ## 커플석들의 정보
    Ss = seats.split('LL') ## 싱글석들의 정보
    L_holders = [len(n)//2-1 for n in Ls if n!='']
    S_holders = [len(n)-1 for n in Ss if n!='']
    ans = len(L_holders)+len(S_holders)+sum(L_holders)+sum(S_holders)+1
    print(min(N,ans))

 

_____________________________모범 답안______________________________

 

힌트 : 맨 왼쪽을 제외하곤 자리 묶음당 하나씩 컵홀더가 생긴다. --> seats.replace('LL','S')를 사용하면 더 간단하게 구할 수 있다.

출처 : yjm6560님의 코드