첫번째 코드
이때 문제를 잘못 이해하고 있다는 것을 왜 내 나름의 논리로 푼 이후에 생각이 든 것일까...
k를 섞는 개수라고 생각하고 계속 움직여야 한다고 생각하였다...
아래 코드는 완전히 문제와 다른 코드이다..
test_case = int(input())
for i in range(test_case):
cups, move_limit = input().split(' ')
move_limit = int(move_limit)
for j in range(3):
if cups[j] == 'o':
now = j
break
if move_limit == 0:
answer = j
print(f'#{i+1} {answer}')
break
probability_list = [0, 0, 0]
def dfs(now, move, probability):
if move == move_limit:
probability_list[now] = max(probability_list[now], probability)
return
if now == 0:
dfs(now + 1, move + 1, probability)
elif now == 2:
dfs(now - 1, move + 1, probability)
else:
now_list = [0, 2]
probability *= 0.5
for nows in now_list:
dfs(nows, move + 1, probability)
dfs(now, 0, 1)
answer_probability = max(probability_list)
for k in range(3):
if probability_list[k] == answer_probability:
answer = k
break
print(f'#{i+1} {answer}')
오류 ㅠㅠ
아예 문제 이해를 잘못하고 있었다.
두번째 코드
여기서 중요한 것은 가능성을 구한다기 보다는 명확하게 움직인다! 라고 생각하고 움직인다는 것이다.
백날 종이 울리지 않는 컵을 섞는 것은 의미가 없으므로 종이 울리는 컵만을 섞는다고 생각하자
또한 같은 가능성의 경우 왼쪽으로 간다고 가정하고 경우를 찾으면 된다.
즉, 0은 1로 움직이지만, 1과 2는 무조건 0과 1로 움직인다고 생각하면 된다.
종이 k번 울릴때까지 진행하므로 while문을 사용하여 코드를 작성하였다.
test_case = int(input())
for i in range(test_case):
cups, k = input().split(' ')
k = int(k)
ring = 0
for j in range(3):
if cups[j] == 'o':
now = j
break
if k == 0:
answer = j
print(f'#{i+1} {answer}')
break
while ring != k:
if now == 0:
now += 1
elif now == 1:
now -= 1
else:
now -= 1
ring += 1
print(f'#{i+1} {now}')
사실 해당 코드가 틀린 이유를 찾지 못했다...
세번째 코드
while문 보다는 어차피 k번 진행하므로 for 문을 사용하여 정리하였다.
근데 여전히 두번쨰 코드가 어디서 오류가 발생했는지는 의문이다...
test_case = int(input())
for i in range(test_case):
cups, k = input().split(' ')
k = int(k)
for j in range(3):
if cups[j] == 'o':
now = j
break
for _ in range(k):
if now == 0:
now += 1
else:
now -= 1
print(f'#{i+1} {now}')
통과!
링크
programmers/SWEA/D3/20934. 방울 마술 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com