본문 바로가기
프로그래밍/알고리즘 문제

17615 볼 모으기 (python)

by 잇서니 2019. 12. 14.
반응형
1. 볼 모으기 (17615)

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]

#올림피아드초등문제

반응형

댓글