입력으로 이닝 수가 주어지고 다음 줄에는 각 이닝에서 1~9번의 선수들이 공을 쳤을 때 나오는 경우가 주어집니다.
안타 : 1
2루타 : 2
3루타 : 3
홈런 : 4
아웃 : 0
우선 1번이 무조건 4번타자이므로 1번을 제외한 2번~9번까지 브루트포스 방식으로 순열을 구합니다.
저는 cnt가 3이되면 그다음은 무조건 1번선수를 넣었습니다.
그 다음 게임을 시작합니다.
g : 이닝 수
t : 현재 타자
out : 아웃 수 (3 out이면 이닝 종료)
x : 현재 타자의 결과
저는 ground배열로 1~3루 나가있는 선수를 체크하였고, ground[3]은 점수입니다.
x가 1이면 안타이므로 모두 1칸씩 이동합니다.
x가 2이면 2루타이므로 모두 2칸씩 이동합니다.
x가 3이면 3루타이므로 모두 3칸씩 이동합니다.
x가 4이면 홈런이므로 나가있는 선수들과 본인 포함해서 점수에 더해줍니다.
x가 0이면 아웃이므로 out을 1 늘려주고 만약 out이 3이되면 이닝 종료이므로 ground를 초기화해주고 다음 이닝으로 넘어갑니다.
여기서 이닝이 바뀌어도 현재타자는 계속 유지시켜줘야합니다.
위와같은 방식으로 시뮬레이션을 돌려서 max점수를 출력해주시면 됩니다.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static ArrayList<Integer> order = new ArrayList<>();
static boolean visit[];
static int list[][];
static int N, ans;
static void game() {
int ground[] = new int[4];
int g = 0;
int t = 0;
int out = 0;
while (g < N) {
int x = list[g][order.get(t)];
if (x == 1) {
ground[3] += ground[2];
ground[2] = 0;
ground[2] += ground[1];
ground[1] = 0;
ground[1] += ground[0];
ground[0] = 1;
} else if (x == 2) {
ground[3] += ground[2];
ground[2] = 0;
ground[3] += ground[1];
ground[1] = 0;
ground[2] += ground[0];
ground[1] = 1;
ground[0] = 0;
} else if (x == 3) {
ground[3] += ground[2];
ground[3] += ground[1];
ground[3] += ground[0];
ground[1] = 0;
ground[0] = 0;
ground[2] = 1;
} else if (x == 4) {
int sum = 1;
for (int i = 0; i <= 2; i++) {
if (ground[i] == 1) {
ground[i] = 0;
sum++;
}
}
ground[3] += sum;
} else {
out++;
if (out == 3) {
ground[2] = 0;
ground[1] = 0;
ground[0] = 0;
out = 0;
g++;
}
}
t = (t + 1) % 9;
}
ans = Math.max(ans, ground[3]);
}
static void func(int cnt) {
if (cnt == 9) {
game();
return;
}
if (cnt == 3) {
order.add(0);
func(4);
order.remove(cnt);
}
for (int i = 1; i < 9; i++) {
if (visit[i])
continue;
visit[i] = true;
order.add(i);
func(cnt + 1);
order.remove(cnt);
visit[i] = false;
}
}
static void input() throws Exception {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
list = new int[N][9];
visit = new boolean[10];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 9; j++) {
list[i][j] = Integer.parseInt(st.nextToken());
}
}
}
public static void main(String[] args) throws Exception {
input();
func(0);
System.out.println(ans);
}
}
|
cs |
'algorithm > Bruteforce' 카테고리의 다른 글
boj 14456 Hoof, Paper, Scissors (Bronze) (0) | 2022.12.30 |
---|---|
boj 3040 백설 공주와 일곱 난쟁이 (0) | 2021.02.15 |
boj 2961 도영이가 만든 맛있는 음식 (0) | 2021.02.15 |
boj 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.01.29 |
boj 1018 체스판 다시 칠하기 (0) | 2021.01.29 |