본문 바로가기

알고리즘/대회

[대회][BOJ][INU 코드페스티벌 2020] D번 20365 : 블로그2

문제를 정리해 보자.

 

 

문제를 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한다.

각 문제를 칠할 때 아래와 같은 과정을 한 번의 작업으로 수행한다.

 

1. 연속된 임의의 문제들을 선택한다.

2. 선택된 문제들을 전부 원하는 같은 색으로 칠한다.

 

 

예시

 

 

단순히 위에서 아래로 칠해보자.

 

 

횟수 번호
1 1,2
2 3
3 4
4 5
5 6,7
6 8

 

 

최소한의 작업 횟수로 수행해보자.

이를 구현해야 한다.

 

횟수 번호
1 1,2,3,4,5,6,7
2 3
3 5
4 8

 

 

어떻게 구현해야 할까? 아래 방법처럼 하면 된다.

(아래는 다른 예시이다.)

 

B B R B R B B R B

 

 

연속된 동일 알파벳은 하나의 알파벳으로 본다. 즉, 중복을 제거한다.

(중복이 제거되었기 때문에 R과 B가 교차로 있게 된다.)

R의 개수와 B의 개수 중, 더 큰 것은 한 번에 칠하고 더 작은 것은 하나씩 칠한다.

 

만약, R의 개수와 B의 개수가 동일하다면 어느 것을 선택해도 상관없다.

 

 

num = int(input())

tmp = ""
string = []

# 중복 덩어리 제거
for s in input():
    if s != tmp:
        string.append(s)
    tmp = s

R = string.count("R")
B = string.count("B")

print(min(R, B) + 1)