반응형
1. 볼 모으기 (17615)
문제조건
- 빨간색 혹은 파란색 공 한 개만 움직일 수 있다.
- 뭉터기를 한 번에 건너뛰어 이동시킬 수 있다.
- 같은 색끼리 모으되 최소 이동횟수를 찾아라.
아이디어
- 총 4가지 경우가 있다.
- R을 옮기는데, R을 오른쪽으로 모으는 경우
- R을 옮기는데, R을 왼쪽으로 모으는 경우
- B를 옮기는데, B를 오른쪽으로 모으는 경우
- B를 옮기는데, B를 왼쪽으로 모으는 경우
- R을 움직일건데, R뭉터기가 있으면 고려할 필요가 없다. 뭉터기를 제외한 나머지 ball에서 쇼부를 치면 된다.
- 왼쪽으로 모으는 경우도 오른쪽으로 모으는 경우와 동일한 컨셉으로 이동하면 된다. ball 리스트를 역순으로 만들어 진행하면 된다.
코드
# 움직이려는 색깔 공이 뭉터기 되어 있는 부분은 고려할 필요가 없으니 pop!
def init(color, ball):
for _ in range(len(ball)):
c = ball.pop()
if c != color :
ball.append(c)
break
return ball
# pop 처리 된 ball 중에서, 움직이려는 공의 개수만큼이 최소 이동횟수이다.
def move(color, ball):
ball = init(color, ball)
return ball.count(color)
N = int(input())
ball = list(input())
print(min(move('R',ball[:]), move('R',ball[::-1]), move('B',ball[:]), move('B',ball[::-1]))
Python 팁
리스트 인덱싱
리스트변수[시작인덱스:종료인덱스:step
- 종료인덱스 값은 포함되지 않는다.
- step 이 음수인 경우는 역순이다.
- 시작부터 끝 : a[:]
- 시작부터 끝(역순) : a[::-1]
#올림피아드초등문제
반응형
'프로그래밍 > 알고리즘 문제' 카테고리의 다른 글
[DP] 백준 2011 암호코드 (python) (2) | 2020.03.09 |
---|---|
17616 등수 찾기 (python) (2) | 2019.12.14 |
[BOJ 1012 유기농배추] BFS와 DFS로 풀기 (python) (4) | 2019.10.14 |
[SWEA] 구슬탈출 2 (2) | 2019.10.09 |
[BOJ13549 숨바꼭질3] BFS (Python) (4) | 2019.10.07 |
댓글