이 문제를 정말 오래 고민했었는데, 한 가지 색의 공만 옮길 수 있다는 조건을 내가 놓치지 않았다면 더 빨리 풀었을 수 있을 것 같다.
1가지 색의 공만 옮길 수 있다면, 문제가 고려해야 할 케이스는 4가지이다.
1. 빨간 공을 다 오른쪽으로
2. 파란 공을 다 오른쪽으로
3. 빨간 공을 다 왼쪽으로
4. 파란 공을 다 오른쪽으로
가장 왼쪽, 오른쪽에 원하는 색의 공이 있으면 굳이 옮길 필요없다.
따라서 위의 상황을 고려하기 위해 strip으로 문제를 풀었다.
strip을 사용하려면 공의 색 배치를 문자열로 받아야 한다.
n = int(input().rstrip())
balls = input().rstrip()
이렇게 받고 4가지 케이스를 고려하여 볼을 카운트 하는 코드를 작성하였다.
# R을 오른쪽
red_right = balls.rstrip('R')
cnt.append(red_right.count('R'))
# B를 오른쪽
blue_right = balls.rstrip('B')
cnt.append(blue_right.count('B'))
# R을 왼쪽
red_left = balls.lstrip('R')
cnt.append(red_left.count('R'))
# B를 왼쪽
blue_left = balls.lstrip('B')
cnt.append(blue_left.count('B'))
cnt 리스트에서 min을 출력해주면 정답이 잘 출력되었다.
문제를 풀고 나니, 한 번에 2가지 색의 공을 모두 움직일 수 있다면 어떤 식으로 구현해야 할까 하고 궁금해졌다.
이 구현 방식은 다음 포스트에서 올리도록 하겠습니다.