즐거운 PS 👩‍💻🥰

[백준/파이썬] 24467: 혼자 하는 윷놀이

dalin❤️ 2022. 4. 20. 20:40

문제 보러가기

구현, 시뮬레이션 문제였다.

처음에는 '어떻게 윷판 위 현재 위치를 나타내지?' 고민했는데, 4가지 루트가 있다는 걸 보고 그걸 이용해서 문제를 풀었다.

  1. 현재 어떤 루트로 가고 있는지 나타내는 course, 말의 위치를 idx로 두었다.

출처: https://www.acmicpc.net/problem/24467

위 그림 순서와는 다르게, 나는 빙~ 돌아가는 걸(위 그림에서 4번) 0, 첫번째 갈림길에서 꺾이는 걸(위 그림에서 3번) 1, 젤 빠른 길(위 그림에서 1번)을 2, 위 그림에서 2번을 3으로 뒀다.

  1. 그 뒤에 윷을 던져서 앞으로 가는 칸수에 따라서 idx를 바꿔준다.
    이때 주의점은 다 앞면이거나 다 뒷면이면, 윷 던질 기회를 한번 더 준다는 것! 그래서 while을 이용해서 처리했다.
  2. 지름길을 만나면 지름길로 간다.
    위에서 바꾼 idx를 이용해서 지름길로 갈 수 있는지 판단하고, 갈 수 있으면 간다.
    특이한 점은 첫번째 갈림길에서 꺾여야 젤 빠른 길로 갈 수 있다는 거..!
    말의 위치는 코스를 바꾸면, 0으로 바꿔줬다. (거기에서부터 도착점까지 가는 칸수를 고려해서)
  3. 10턴 안에 각 코스 별로 도착점까지 가는 칸수+1이 되면 승리한 걸로 봤다.

코드 👩‍💻

'''
24467: 혼자 하는 윳놀이
https://www.acmicpc.net/problem/24467
'''

import sys

input = sys.stdin.readline

course = 0
idx = 0

isWin = False
for i in range(10):
    yuk = sum(list(map(int, input().rstrip())))
    while yuk == 0 or yuk == 4:
        # 모두 뒷면: 4칸 -> 윷 다시
        if yuk == 0:
            idx += 4
        # 모두 앞면: 5칸 ->  윷 다시
        elif yuk == 4:
            idx += 5
        yuk = sum(list(map(int, input().rstrip())))

    if yuk == 3:  # 뒷면 하나: 1칸
        idx += 1
    elif yuk == 2:  # 뒷면 2: 2칸
        idx += 2
    elif yuk == 1:  # 뒷면 3: 3칸
        idx += 3

    # 0번으로 가다가
    if course == 0:
        # 1번 갈림길 만나면
        if idx == 5:
            course = 1
            idx = 0
        # 3번 갈림길 만나면
        elif idx == 10:
            course = 3
            idx = 0
        # 도착
        elif idx >= 21:
            isWin = True
    # 1번으로 가다가
    elif course == 1:
        # 2번 갈림길 만나면
        if idx == 3:
            course = 2
            idx = 0
        # 도착
        elif idx >= 12:
            isWin = True

    # 2번으로 가다가
    elif course == 2:

        # 도착
        if idx >= 4:
            isWin = True

    # 3번으로 가다가
    elif course == 3:
        # 도착
        if idx >= 7:
            isWin = True

# 승리 여부
if isWin:
    print('WIN')

else:
    print('LOSE')
728x90