[λ°±μ€]17281λ² βΎ(μΌκ΅¬)
λ¬Έμ
μ λ ₯
첫째 μ€μ μ΄λ μ N(2 ≤ N ≤ 50)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ κ° μ μκ° κ° μ΄λμμ μ»λ κ²°κ³Όκ° 1λ² μ΄λλΆν° Nλ² μ΄λκΉμ§ μμλλ‘ μ£Όμ΄μ§λ€. μ΄λμμ μ»λ κ²°κ³Όλ 9κ°μ μ μκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄μ Έ μλ€. κ° κ²°κ³Όκ° μλ―Ένλ μ μλ λ€μκ³Ό κ°λ€.
- μν: 1
- 2루ν: 2
- 3루ν: 3
- νλ°: 4
- μμ: 0
κ° μ΄λμλ μμμ κΈ°λ‘νλ νμκ° μ μ΄λ ν λͺ μ‘΄μ¬νλ€.
μΆλ ₯
μμΈννμ΄ μ»μ μ μλ μ΅λ μ μλ₯Ό μΆλ ₯νλ€.
https://www.acmicpc.net/problem/17281
17281λ²: βΎ
βΎλ 9λͺ μΌλ‘ μ΄λ£¨μ΄μ§ λ νμ΄ κ³΅κ²©κ³Ό μλΉλ₯Ό λ²κ°μ νλ κ²μμ΄λ€. νλμ μ΄λμ 곡격과 μλΉλ‘ μ΄λ£¨μ΄μ Έ μκ³ , μ΄ Nμ΄λ λμ κ²μμ μ§νν΄μΌ νλ€. ν μ΄λμ 3μμμ΄ λ°μνλ©΄ μ΄λμ΄ μ’
www.acmicpc.net
νμ΄
4λ²νμλ₯Ό μ μΈν νμμ μ ν΄μΌ νλ―λ‘ 'μμ΄'
νμμ νλ μμ΄ μ½λλ₯Ό μμ±ν λ€, κΈ°μ μ‘°κ±΄μ΄ λ§μ‘±νλ©΄ κ²μμ μ§ν
κ²μμ μ£Όμ΄μ§ μ΄λλ§νΌ λ°λ³΅λλ©°, out μΉ΄μ΄νΈκ° 3μ΄ λλ©΄ μ΄λ λ³κ²½.
μνλΆν° νλ°κΉμ§μ μ‘μ μ κ°κ° μ€μ
μ½λ
import java.io.*;
import java.util.*;
public class Main{
static int n;
static int[][] score;
static int max_score;
static boolean[] isSelected;
static int[] tasun;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
score = new int[n][9];
for(int i =0 ; i < n ; i++) {
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int j = 0 ; j < 9 ; j ++) {
score[i][j] = Integer.parseInt(st.nextToken());
}
}
max_score = Integer.MIN_VALUE;
isSelected = new boolean[9];
isSelected[0] = true; //1λ²μ μλ μ΄λ―Έ λ°°μΉ
tasun = new int[9];
tasun[3] = 0; //4λ²νμλ μ΄λ―Έ λ°°μΉ
perm(0); //μμ΄ μ€ν
System.out.println(max_score);
}
public static void perm(int cnt) {
if(cnt == 3) { // 4λ²μ§Έ νμλ 1λ².
perm(cnt + 1);
return;
}
else if(cnt == 9) { //κΈ°μ 쑰건
game(); //κ²μμ§ν
return;
}
for(int i = 1; i < 9 ; i++) {
if(isSelected[i]) continue;
tasun[cnt] = i;
isSelected[i] = true;
perm(cnt+1);
isSelected[i] = false;
}
}
public static void game() {
int out = 0; //outμΉ΄μ΄νΈ
int cur = 0; //νμ¬ νμ μμ
int ining = 0; //μ΄λ
int win =0; //μΉμ
boolean hit[] = new boolean[3]; //루μ μν(false-μ£Όμ μμ, true-μ£Όμμμ)
while(ining<n) {
out = 0; //μ΄λ μμμ outκ³Ό 루 μ΄κΈ°ν
hit = new boolean[3];
while(out<3) { //1~4μ λ°λ₯Έ 루μ λ³ν λ° λμ
if(score[ining][tasun[cur]] == 0) out++; //μμ
else if(score[ining][tasun[cur]] == 1) { //μν
if(hit[2]) win ++;
hit[2] = hit[1];
hit[1] = hit[0];
hit[0] = true;
}
else if(score[ining][tasun[cur]] == 2) { //2루
if(hit[2]) win ++;
if(hit[1]) win++;
hit[2] = hit[0];
hit[1] = true;
hit[0] = false;
}
else if(score[ining][tasun[cur]] == 3) { //3루
if(hit[2]) win ++;
if(hit[1]) win++;
if(hit[0]) win++;
hit[2] = true;
hit[1] = false;
hit[0] = false;
}
else if(score[ining][tasun[cur]] == 4) { //νλ°
if(hit[2]) win++;
if(hit[1]) win++;
if(hit[0]) win++;
hit[2] = false;
hit[1] = false;
hit[0] = false;
win++;
}
cur = (cur+1)%9; //9λ² μ μ ν, λ€μ 1λ²μΌλ‘ λμκ°λ μνꡬ쑰μ΄λ―λ‘
}
ining ++;
}
max_score = Math.max(max_score, win);
}
}