728x90
문제
윷놀이 판에 말 4개가 움직일때, 얻은 점수 합을 출력하라. 각 말들이 가장 마지막에 밟았던 칸의 점수를 합산한다.
말의 이동 시작점은 Start 이며, 도착지점은 End 이다. 만약, 이동해야하는 칸이 도착 지점을 넘어서거나, 도착 지점을 밟았을 경우 도착 지점의 점수를 얻고 해당 말은 판에서 제외된다. 제외된 말은 더 이상 이동할 수 없다. 예를 들어, 50점과 75점 칸을 밟을 경우, 화살표가 가리키는 방향으로 움직여야한다. 기본적으로 흰색 칸이 있는 경로로 이동한다.
이동하려고 하는 칸에 다른 말이 있는 경우 이동할 수 없다. 해당 입력은 "-1"을 출력하도록 한다.
입력
첫 번째 줄에 총 이동 횟수 N이 주어진다. 두 번째 줄에 이동하게되는 칸의 수가 공백을 통해 구분하여 N개 주어진다. 세 번째 줄에 주어진 칸의 수를 몇 번 말이 이동하게 되는지 공백을 통해 구분하여 주어진다. (1 ≤ N ≤ 10, 1 ≤ 이동하는 칸의 수 ≤ 5, 1 ≤ 말의 번호 ≤ 4)
출력
각 말들이 이동을 종료한 후 위치해있는 칸의 점수 합을 출력한다. 만약 이동하려고 하는 칸에 다른 말이 있는 경우 "-1" 을 출력한다.
입력 예제 1
5
2 3 1 2 4
1 1 2 3 4
출력 예제 1
85
입력 예제 2
8
5 5 5 5 3 2 3 2
1 2 3 4 1 2 3 4
출력 예제 2
-1
#코드
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
from collections import defaultdict
import sys
if __name__ == "__main__":
input = sys.stdin.readline
main_board = [0, 5, 10, 15, 20, 50, 30, 35, 40, 45, 100, 55, 60, 65, 70, 75, 80, 85, 90, 95, 500, 1000, 275, 250, 300, 150, 175, 150, 125, 350, 400]
sub_board_idx = [
[5, 22, 23, 24, 25, 26],
[22, 23, 24, 25, 26, 15],
[23, 24, 25, 26, 15, 16],
[24, 29, 30, 20, 21, 21],
[25, 26, 15, 16, 17, 18],
[26, 15, 16, 17, 18, 19],
[10, 27, 28, 24, 29, 30],
[27, 28, 24, 29, 30, 20],
[28, 24, 29, 30, 20, 21],
[29, 30, 20, 21, 21, 21],
[30, 20, 21, 21, 21, 21]
]
moving = [[-1] * 6 for _ in range(35)]
for i in range(11):
for j in range(1, 6):
moving[sub_board_idx[i][0]][j] = sub_board_idx[i][j]
N = int(input())
move = list(map(int, input().split()))
player = list(map(int, input().split()))
player_cnt = defaultdict(int)
isPossible = True
for p in player:
player_cnt[p] = 0
for m, p in zip(move, player):
for i in range(11):
flag = False
if player_cnt[p] == sub_board_idx[i][0]:
flag = True
break
if flag:
player_cnt[p] = moving[player_cnt[p]][m]
else:
player_cnt[p] += m
if player_cnt[p] >= 21: player_cnt[p] = 21
temp_dic = defaultdict(int)
for k, v in player_cnt.items():
if v > 0:
temp_dic[v] += 1
if temp_dic[v] > 1:
isPossible = False
break
if player_cnt[p] == 21: break
if isPossible:
sum_val = 0
for k, v in player_cnt.items():
sum_val += main_board[v]
print(sum_val)
else:
print(-1)
|
cs |
반응형