1. 유형
구현, 순열
2. 풀이
타자의 순서를 정해줘야 한다. 그러기 위해서 순열을 이용한다.
9번째의 타자의 순서를 정해줄 때, 1번 선수는 무조건 4번째에 놓아야한다.
그러기 위해 아래 네모칸 코드를 넣어줬다.
게임을 진행 할때의 예외 처리는, 9번 타자까지 다 쳤을때, 다시 1번 타자로 넘어와야한다
그리고 아웃이 3번인 경우 베이스를 초기화 하고, out카운트를 0으로 만든다.
베이스를 끝 부터 탐색해서, 몇루타를 쳤는지 만큼 뛴다.
베이스는 3번까지만 있으니깐 3번을 초과하면 arr[4]에 초과한 횟수를 저장한다.
베이스를 3번부터 0번까지 탐색후 arr[4]에 저장된 값이, 방금 선수의 득점이 된다.
예를들어서 초기 베이스가 아래의 상태였다면,
위에서 2루타를 쳤다면 아래처럼 베이스가 그려지는 로직이다. 즉 2점을 얻은거다.
3 코드
package 구현;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Beak_17281야구 {
static int score[][];
static int ans = 0, N;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
N = Integer.valueOf(st.nextToken());
score = new int[N][10];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(in.readLine(), " ");
for (int j = 1; j < 10; j++) {
score[i][j] = Integer.valueOf(st.nextToken());
}
}
int player[] = new int[10];
boolean visit[] = new boolean[10];
visit[1] = true;// 1번선수는 선택했음
player[4] = 1; // 4번타자는 무조건 1번선수
perm(1, player, visit);
System.out.println(ans);
}
static void perm(int idx, int player[], boolean visit[]) {
if (idx == 10) {
ans = Math.max(gameStart(player), ans);
return;
}
if (idx == 4)
idx++;
for (int i = 1; i < 10; i++) {// 타자번호
if (visit[i])
continue;
player[idx] = i;
visit[i] = true;
perm(idx + 1, player, visit);
visit[i] = false;
}
}
static int gameStart(int player[]) {
int cur = 1;
int outt = 0;
int arr[] = new int[5];
int ret=0;
for (int i = 0; i < N; i++) {
while (true) {
int d = score[i][player[cur]];
switch (d) {
case 0:
outt++;
break;
case 1:
case 2:
case 3:
case 4:
ret+=run(d, arr);
break;
}
cur++;
if(cur==10) cur=1;
if(outt==3) {
outt=0;
arr = new int[5];
break;
}
}
}
return ret;
}
static int run(int d, int arr[]) {
arr[4]=0;
for(int i=3; i>=0; i--) {
if(arr[i]==1 || i==0) {
int go=i+d;
arr[i]=0;
if(go>3) {
arr[4]+=1;
}else {
arr[go] = 1;
}
}
}
return arr[4];
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 - 15922] 골드5 - 아우으 우아으이야!! (0) | 2020.11.10 |
---|---|
[백준 - 2931] 골드3 - 가스관 (구현) (0) | 2020.11.08 |
[백준 - 15685] 골드4 - 드래곤 커브 (0) | 2020.11.07 |
[백준 - 2457] 골드4 - 공주님의 정원(그리디) (0) | 2020.11.01 |
[백준 - 1276] 골드5 - 교각 놓기 (2) | 2020.10.31 |