본문 바로가기

알고리즘/백준

백준[17615] 볼 모으기 (Python3)

관찰이 필요한 문제

모든 경우에서 볼들을 이동시킨 결과는 [빨강, 파랑] 또는 [파랑 빨강]이 나오게 된다.
따라서, 끝 점의 볼들을 센 다음,  가장 많은 종류의 볼들이 모인 곳을 기준으로 다른 볼들을 움직여야 한다.

이제 4가지 경우에 걸쳐 끝점의 볼을 기준으로 같은 종류의 볼을 모은다.
즉, 맨 왼쪽이 빨간색이라면, 다른 위치에 있는 빨간 볼을 모두 왼쪽으로 모은다.

4가지 경우는 다음과 같다.
1. 맨 왼쪽이 빨간 볼인 경우.
2. 맨 왼쪽이 파란 볼인 경우
3. 맨 오른쪽이 빨간 볼인 경우
4. 맨 오른쪽이 파란 볼인 경우

위 4가지 경우를 통해 움직여진 볼의 개수의 최소값이 답이다.

 

더보기
N = int(input())
redC, blueC = 0, 0
S = input()
for s in S:
    if s == 'R':
        redC += 1
    else:
        blueC += 1
temp = [redC, blueC]
if S[0] == 'R':
    temp.append(redC - len(S.split("B")[0]))
if S[0] == 'B':
    temp.append(blueC - len(S.split("R")[0]))
if S[-1] == 'R':
    temp.append(redC - len(S.split("B")[-1]))
if S[-1] == 'B':
    temp.append(blueC - len(S.split("R")[-1]))
print(min(temp))

 

'알고리즘 > 백준' 카테고리의 다른 글

백준[13904] 과제 (Python3)  (0) 2022.11.05
백준[2513] 통학버스 (Python3)  (0) 2022.11.05
백준[1092] 배 (Python3)  (0) 2022.11.05
백준[17616] 등수 찾기 (Python3)  (0) 2022.11.05
백준[15973] 두 박스 (Python3)  (0) 2022.11.05