문제
코드
My answer
import sys
input=sys.stdin.readline
n=int(input())
a=input()
cnt=0
temp=[a[0]]
for i in range(1,len(a)):
if(a[i]!=temp[-1] and a[i]!='\n'):
temp.append(a[i])
temp='.'.join(temp)
b=temp.count('B')
r=temp.count('R')
c=temp.count('.')+1
answer=min(min(b,r)+1,c)
print(answer)
Another answer
N = int(input())
colors = input()
cdict = {'B':0, 'R':0}
precolor = ''
for color in colors:
if color != precolor:
cdict[color]+=1
precolor=color
count = cdict['R']+1 if cdict['B']>cdict['R'] else cdict['B']+1
print(count)
풀이
생각보다 간단했다. 우선 같은 색깔은 연속으로 한번에 칠할 수 있기 때문에 연속된 문자들을 하나로 바꿔줬다.
ex) 'BBBRRBB' --> 'BRB'
이렇게 바꿔준 뒤 총 3가지 케이스를 비교했다.
1. B로 전체 칠하고 R인 것들만 다시 덧칠하기
2. R로 전체 칠하고 B인 것들만 다시 덧칠하기
3. 앞에서부터 B,R 순서대로 칠하기
이렇게 세가지 경우를 비교하여 가장 최소인 경우를 답으로 선정하였다.
다른 분들의 답을 보며 생각해보니, 앞에서부터 칠하는 것보다 전체를 칠하고 덧칠하는 것이 더 최소여서
위의 3가지 경우중 1,2만비교해줘도 될 것 같다. 추가적으로 다른 분들은 딕셔너리로 구현하여 더 좋았다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #11501- 주식 (0) | 2023.09.01 |
---|---|
[Python] 백준 #21314- 민겸 수 (0) | 2023.09.01 |
[Python] 백준 #1541- 잃어버린 괄호 (0) | 2023.09.01 |
[Python] 백준 #19941 - 햄버거 분배 (0) | 2023.08.24 |
[Python] 백준 #20300 - 서강근육맨 (0) | 2023.08.24 |