1일 1솔

[백준] 17615번: 볼 모으기 (Python, 파이썬)

junmukbap98 2023. 9. 24. 22:47

문제 링크: https://www.acmicpc.net/problem/17615

 

17615번: 볼 모으기

첫 번째 줄에는 볼의 총 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 다음 줄에는 볼의 색깔을 나타내는 문자 R(빨간색 볼) 또는 B(파란색 볼)가 공백 없이 주어진다. 문자열에는 R 또는 B 중 한 종류만 주

www.acmicpc.net

이거 문제 못풀었다 .. ; 다른 코드 찾아보면서 놀랬다.. 너무 간단해서... 이렇게 푼 사람 천잰가...?

 

Key Point

- 한 번에 답을 찾는게 아니라, 빨간 공을 왼쪽, 오른쪽으로 몰았을 때 / 파란 공을 왼쪽, 오른쪽으로 몰았을 때 

이렇게 네 가지 경우의 수를 구한 다음에 min 값을 return 하는 것

- 그럼 각각의 움직이는 횟수는 어떻게 세느냐? 

빨간 공을 오른쪽으로 몰았을 때: R이 오른쪽 맨 끝에 있다면, 어차피 그쪽으로 모을 것이기 때문에 count X --> 그 다음 R공의 개수 count (어차피 하나씩 옮겨야 하는 것이 룰이기 때문에)

이거를 네 가지 경우에 수에 대해 구해주면 된다.

N = int(input())
balls = input()
cnt = []

red_right = balls.rstrip('R').count('R') # 빨간색 공 오른쪽으로 모으기
red_left = balls.lstrip('R').count('R') # 빨간색 공 왼쪽으로 모으기
blue_right = balls.rstrip('B').count('B') # 파란색 공 오른쪽으로 모으기
blue_left = balls.lstrip('B').count('B') # 파란색 공 왼쪽으로 모으기
print(min(red_right, red_left, blue_right, blue_left))