작심 365
[백준 20365번] 블로그2 - (python) 본문
문제 링크 : https://www.acmicpc.net/problem/20365
20365번: 블로그2
neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한
www.acmicpc.net
Idea
우선 문제에서 최소값을 구하라고 하고 있고 규칙만 찾으면 최솟값을 찾을 수 있을것 같은 느낌이 들었다.
좋아 보이는 방법을 적용했을때 그 방법이 local -> global 로 갈때도 적용된다면 Greedy 문제이다.
문제에서 연속된 문제들은 같은 색으로 한번의 칠로 칠할 수 있다고 했으므로 연속된 같은 색끼리 묶을 수 있다.
총 6개로 묶을 수 있고 처음부터 이렇게 칠하면 6번의 작업을 통해 완성할 수 있다.
이런식으로 칠하는 방식은 칠할 수 있는 횟수의 최대가 된다.
그러면 만약 먼저 하나의 색으로 다 칠하고 다른 색이 있는 부분만 또 칠하면 어떻게 될까
우선 파란색으로 먼저 다 칠한 경우를 보자.
파란색으로 한번에 다 칠하고 빨간색이 있는 부분을 칠해주면 된다.
총 4번만에 작업을 완성할 수 있다.
빨간색으로 먼저 다 칠한 경우를 보자.
빨간색으로 한번에 다 칠하고 파란색이 있는 부분을 칠해주면 된다.
마찬가지로 총 4번만에 작업을 완성할 수 있다.
한가지 색으로 먼저 칠한 경우 작업 횟수가 모두 동일했지만 처음에 봤던 처음부터 같은 색의 묶음 별로
칠하는 것 보다는 훨씬 작업량이 줄어들게 된다.
예제에서 나온 그림의 경우는 두가지 색의 그룹 갯수가 동일했기때문에 둘다 같은 횟수인 4가 나왔지만
만약 파란색 그룹의 수가 더 많았다고 가정한다면, 빨간색으로 먼저 칠하고 파란색을 칠하는 것보다 파란색으로 칠하고
빨간색으로 칠하는 것이 더 작업량이 작다는 것을 알 수 있다.
따라서 무조건 한번은 둘중 하나의 색으로 통일해서 칠하는 횟수로 들어가고
두 색중에 그룹수가 더 작은 색의 그룹 수만큼 더해주면 된다는 것을 알 수 있다.
풀이
Python
N = int(input())
color = list(input())
d = {"R":0,"B":0}
d[color[0]]+=1
prev = color[0]
for i in range(1,N):
if color[i]!=prev:
d[color[i]]+=1
prev = color[i]
min_group = min(d["R"],d["B"])
result = 1 + min_group
print(result)
'코테 > 백준' 카테고리의 다른 글
[백준 2302번] 극장 좌석 - (python) (1) | 2024.08.25 |
---|---|
[백준 1932번] 정수 삼각형 - (python) (0) | 2024.08.25 |
[백준 11052번] 카드 구매하기 - (Java/python) (2) | 2023.12.22 |
[백준 9095번] 1,2,3 더하기 - (Java/python) (1) | 2023.12.20 |
[백준 1463번] 1로 만들기 - (Java/python) (1) | 2023.12.19 |