[백준] 17615 볼 모으기 - python

이윤진·2023년 11월 22일
0

알고리즘 연습

목록 보기
24/24

이 문제를 정말 오래 고민했었는데, 한 가지 색의 공만 옮길 수 있다는 조건을 내가 놓치지 않았다면 더 빨리 풀었을 수 있을 것 같다.

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가지 색의 공을 모두 움직일 수 있다면 어떤 식으로 구현해야 할까 하고 궁금해졌다.

이 구현 방식은 다음 포스트에서 올리도록 하겠습니다.

profile
Android/Flutter 개발

0개의 댓글