코드
for tc in range(1, int(input())+1):
possible = [0, 0, 0]
s, k = input().split()
ball = s.index('o')
k = int(k)
if k == 0:
ans = ball
elif ball == 1:
ans = (0 if k % 2 == 1 else 1)
elif ball == 0 or ball == 2:
ans = (1 if k % 2 == 1 else 0)
print(f"#{tc} {ans}")
문제는 간단하다.
처음에 사이드(0 또는 2)에서 시작했으면 홀수번 이동 시에는 1, 짝수번 이동 시에는 다시 사이드(0 또는 2)로 가게 된다. 그리고 처음에 가운데(1)에서 시작하면 홀수번 이동 시에는 사이드, 짝수번 이동 시에는 가운데로 가게 된다.
물론 방울이 든 컵이 0번 이동한다면 당연히 원래 위치 그대로이다.
처음에는 복잡하게 생각해서 아래와 같이 DFS로 가능한 경우의 수를 타고타고 내려갔는데, 생각해보니 사이드는 무조건 가운데로 가고, 가운데는 무조건 사이드로 가기 때문에 아래와 같이 풀이할 필요가 없었다.
possible = [0, 0, 0]
def dfs(ball, cnt):
if cnt == 0:
possible[ball] += 1
return
# 방울이 현재 가운데 => 방울 무조건 울림
if ball == 1:
dfs(ball-1, cnt-1) # 왼쪽과 교환
dfs(ball+1, cnt-1) # 오른쪽과 교환
# 방울이 왼쪽
elif ball == 0:
dfs(ball+1, cnt-1) # 가운데와 교환
# 방울이 오른쪽
else:
dfs(ball-1, cnt-1) # 가운데와 교환
for tc in range(1, int(input())+1):
possible = [0, 0, 0]
s, k = input().split()
ball = -1
k = int(k)
for i in range(3):
if s[i] == 'o':
ball = i
break
dfs(ball, k)
ans = possible.index(max(possible))
print(f"#{tc} {ans}")
'문제풀이 > 수학' 카테고리의 다른 글
[Python/파이썬] 백준 1016번 제곱 ㄴㄴ 수 (0) | 2025.03.24 |
---|---|
[Javascript/자바스크립트] (프로그래머스) k진수에서 소수 개수 구하기 (1) | 2024.12.19 |
[Python/파이썬] 백준 1456번 거의 소수 (0) | 2024.05.14 |
[Python/파이썬] 백준 4134번 다음 소수 (0) | 2024.04.17 |
[Python/파이썬] 백준 2740번 행렬 곱셈 (0) | 2024.03.27 |