728x90
https://www.acmicpc.net/problem/17615
1) 15% 맞았습니다 달성..
ㅠㅠ
import sys
input = sys.stdin.readline
n = int(input())
array = input()
answer = 0
r_move = 0
b_move = 0
r_end = 0
b_end = 0
# 맨 오른쪽의 알파벳 개수 카운트
for i in range(n-1, -1, -1):
if array[i] == 'R':
r_end += 1
if array[i-1] != 'R':
break
else:
b_end += 1
if array[i-1] != 'B':
break
for i in range(n):
if array[i] == 'R':
r_move += 1
else: # B
b_move += 1
if r_move == n or b_move == n:
print(answer) # 이동 횟수 0
else:
answer = min(r_move-r_end, b_move-b_end)
print(answer)
2) 맨 오른쪽에 있는 볼 색깔 뿐만 아니라 맨 왼쪽에 있는 볼 색깔도 카운트 해주어야 했다 !!!!
무조건 오른쪽으로만 볼을 이동할 수 있다고 생각했는데, 그게 아니었다 ..
<정답코드>
import sys
input = sys.stdin.readline
n = int(input())
array = list(input())
r = array.count('R')
b = n - r
answer = min(r, b)
r_end = 0
b_end = 0
# 맨 오른쪽부터 연속된 볼 카운트하기
for i in range(n-1, -1, -1):
if array[i] == 'R':
r_end += 1
if array[i] != array[n-1]:
break
else:
b_end += 1
if array[i] != array[n-1]:
break
if array[n-1] == 'R':
answer = min(r - r_end, answer)
else:
answer = min(b - b_end, answer)
r_start = 0
b_start = 0
# 왼쪽에서부터 연속된 볼 카운트 하기 -> 이걸 생각못함;;
for i in range(n):
if array[i] == 'R':
r_start += 1
if array[i] != array[0]:
break
else: # B
b_start += 1
if array[i] != array[0]:
break
if array[0] == "R": # RRRR ___
answer = min(answer, r - r_start)
else:
answer = min(answer, b - b_start)
print(answer)
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 17070번 : 파이프 옮기기 1 (파이썬/python) 그래프탐색/dp (0) | 2022.12.26 |
---|---|
[백준] 20115번: 에너지 드링크 (Python/파이썬) - Greedy (0) | 2022.12.25 |
[백준] 17471번: 게리맨더링 (파이썬/Python) - bfs, brute force (1) | 2022.12.25 |
백준 17406번: 배열 돌리기 4 (Python/파이썬) (0) | 2022.12.24 |
[백준] 2098 외판원 순회 Swift (0) | 2022.12.17 |