상세 컨텐츠

본문 제목

파이썬으로 풀어보는 백준 17825번: 주사위 윷놀이 (삼성 SW 역량 테스트 기출 문제)

Python/문제풀이 (삼성 A형 대비)

by 코딩하는 낙타 2020. 4. 3. 15:29

본문

https://www.acmicpc.net/problem/17825

 

17825번: 주사위 윷놀이

주사위 윷놀이는 다음과 같은 게임판에서 하는 게임이다. 처음에는 시작 칸에 말 4개가 있다. 말은 게임판에 그려진 화살표의 방향대로만 이동할 수 있다. 말이 파란색 칸에서 이동을 시작하면 파란색 화살표를 타야 하고, 이동하는 도중이거나 파란색이 아닌 칸에서 이동을 시작하면 빨간색 화살표를 타야 한다. 말이 도착 칸으로 이동하면 주사위에 나온 수와 관계 없이 이동을 마친다. 게임은 10개의 턴으로 이루어진다. 매 턴마다 1부터 5까지 한 면에 하나씩 적혀있

www.acmicpc.net

 

 

내 풀이:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def game(idx, horses, score):
    global ans
    check_set = set()
    start_end = 0
    for i in range(4):
        location = table[horses[i][0]][horses[i][1]]
        if location == 0 or location == 1000:
            start_end += 1
        else:
            check_set.add(location)
    if len(check_set) + start_end < 4:
        return
 
    if idx == 10:
        ans = max(ans, score%1000)
        return
 
    for i in range(4):
        if i > 0 and horses[i-1][1== 0:
            continue
        if table[horses[i][0]][horses[i][1]] == 1000:
            continue
        prev = (horses[i][0], horses[i][1])
        horses[i][1+= dice[idx]
        if table[horses[i][0]][horses[i][1]] == 10:
            horses[i][0= 1
        elif table[horses[i][0]][horses[i][1]] == 20:
            horses[i][0= 2
        elif table[horses[i][0]][horses[i][1]] == 30:
            horses[i][0= 3
        game(idx+1, horses, score + table[horses[i][0]][horses[i][1]])
        horses[i][0], horses[i][1= prev
 
 
dice = list(map(int,input().split()))
table = []
table.append([i for i in range(0412)] + [1000* 5)
table.append([0* 5 + [10131016192510303540+ [1000* 5)
table.append([0* 10 + [20102210242510303540+ [1000* 5)
table.append([0* 15 + [3010282710262510303540+ [1000* 5)
 
horses = [[00for _ in range(4)]
ans = 0
game(0, horses, 0)
print(ans)
 

Python3, 132ms

시뮬레이션 구현 문제 중 체감상 가장 어려웠던 문제이다. 이유는 지름길을 탔을 때와 타지 않은 경로상에 같은 수가 존재하여 구분하기 매우 어렵다. 이 문제에서는 같은 수가 3번 이상 등장하진 않기 때문에 중복되는 수에 1000을 더하여 처리해주었다. 이후 답을 출력할 때 1000으로 나눈 나머지를 출력하면 문제를 다소 쉽게 해결할 수 있다.

관련글 더보기

댓글 영역