πλ¬Έμ μ€λͺ
βΎλ 9λͺ μΌλ‘ μ΄λ£¨μ΄μ§ λ νμ΄ κ³΅κ²©κ³Ό μλΉλ₯Ό λ²κ°μ νλ κ²μμ΄λ€. νλμ μ΄λμ 곡격과 μλΉλ‘ μ΄λ£¨μ΄μ Έ μκ³ , μ΄ Nμ΄λ λμ κ²μμ μ§νν΄μΌ νλ€. ν μ΄λμ 3μμμ΄ λ°μνλ©΄ μ΄λμ΄ μ’ λ£λκ³ , λ νμ΄ κ³΅κ²©κ³Ό μλΉλ₯Ό μλ‘ λ°κΎΌλ€.
λ νμ κ²½κΈ°κ° μμνκΈ° μ κΉμ§ νμ(νμκ° νμμ μλ μμ)μ μ ν΄μΌ νκ³ , κ²½κΈ° μ€μλ νμμ λ³κ²½ν μ μλ€. 9λ² νμκΉμ§ 곡μ μ³€λλ° 3μμμ΄ λ°μνμ§ μμ μνλ©΄ μ΄λμ λλμ§ μκ³ , 1λ² νμκ° λ€μ νμμ μ λ€. νμμ μ΄λμ΄ λ³κ²½λμ΄λ μμλ₯Ό μ μ§ν΄μΌ νλ€. μλ₯Ό λ€μ΄, 2μ΄λμ 6λ² νμκ° λ§μ§λ§ νμμλ€λ©΄, 3μ΄λμ 7λ² νμλΆν° νμμ μ λ€.
곡격μ ν¬μκ° λμ§ κ³΅μ νμμ μλ νμκ° μΉλ κ²μ΄λ€. 곡격 νμ μ μκ° 1루, 2루, 3루λ₯Ό κ±°μ³μ νμ λμ°©νλ©΄ 1μ μ λμ νλ€. νμκ° νμ λμ°©νμ§ λͺ»νκ³ 1루, 2루, 3루 μ€ νλμ λ¨Έλ¬Όλ¬μμ μ μλ€. 루μ μλ μ μλ₯Ό μ£ΌμλΌκ³ νλ€. μ΄λμ΄ μμλ λλ μ£Όμλ μλ€.
νμκ° κ³΅μ μ³μ μ»μ μ μλ κ²°κ³Όλ μν, 2루ν, 3루ν, νλ°, μμ μ€ νλμ΄λ€. κ°κ°μ΄ λ°μνμ λ, λ²μ΄μ§λ μΌμ λ€μκ³Ό κ°λ€.
ν μΌκ΅¬νμ κ°λ μμΈνλ νμμ μ νλ €κ³ νλ€. μμΈν νμ μ μλ μ΄ 9λͺ μ΄ μκ³ , 1λ²λΆν° 9λ²κΉμ§ λ²νΈκ° λ§€κ²¨μ Έ μλ€. μμΈνλ μμ μ΄ κ°μ₯ μ’μνλ μ μμΈ 1λ² μ μλ₯Ό 4λ² νμλ‘ λ―Έλ¦¬ κ²°μ νλ€. μ΄μ λ€λ₯Έ μ μμ νμμ λͺ¨λ κ²°μ ν΄μΌ νλ€. μμΈνλ κ° μ μκ° κ° μ΄λμμ μ΄λ€ κ²°κ³Όλ₯Ό μ»λμ§ λ―Έλ¦¬ μκ³ μλ€. κ°μ₯ λ§μ λμ μ νλ νμμ μ°Ύκ³ , κ·Έ λμ λμ μ ꡬν΄λ³΄μ.
μ λ ₯
첫째 μ€μ μ΄λ μ N(2 β€ N β€ 50)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ κ° μ μκ° κ° μ΄λμμ μ»λ κ²°κ³Όκ° 1λ² μ΄λλΆν° Nλ² μ΄λκΉμ§ μμλλ‘ μ£Όμ΄μ§λ€. μ΄λμμ μ»λ κ²°κ³Όλ 9κ°μ μ μκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄μ Έ μλ€. κ° κ²°κ³Όκ° μλ―Ένλ μ μλ λ€μκ³Ό κ°λ€.
κ° μ΄λμλ μμμ κΈ°λ‘νλ νμκ° μ μ΄λ ν λͺ μ‘΄μ¬νλ€.
μΆλ ₯
μμΈννμ΄ μ»μ μ μλ μ΅λ μ μλ₯Ό μΆλ ₯νλ€.
πΎμ μΆλ ₯ μ
μ λ ₯ | μΆλ ₯ |
---|---|
2 4 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 | 1 |
2 4 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 | 4 |
2 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 | 43 |
2 4 3 2 1 0 4 3 2 1 1 2 3 4 1 2 3 4 0 | 46 |
9 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 0 | 216 |
9 1 2 4 3 0 2 1 0 3 1 2 1 2 0 0 0 0 1 3 4 2 3 1 2 3 4 0 0 1 2 3 4 2 1 0 0 0 0 0 0 0 0 1 4 4 0 4 0 4 0 4 0 4 0 0 4 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 0 0 2 0 3 0 1 0 2 0 | 89 |
μκ³ λ¦¬μ¦ λΆλ₯
κ°μλ΄μ©
βοΈκ²μμ μμνκΈ° μ μ νμμ λͺ¨λ κ²°μ νλ€. (λ¨, 1λ²μ μλ 4λ²νμλ‘ κ³ μ )
Β Β Β Β => 8!
βοΈμκ°λ³΅μ‘λ : (κ²μ νλ μ΄) N x (1μ΄λλΉ) x 3μμ x 9λͺ
μ μ
Β Β Β Β => 8! x N(μ΅λ 50) x 3 x 9 = 54432000
πλ¬Έμ μ΄ν΄ λ° νμ΄κ³ν
βοΈ1λ² μ μ(4λ² νμλ‘ κ³ μ ) μ μΈνκ³ λλ¨Έμ§ 8λͺ μ μμλ₯Ό μμ΄λ‘ λͺ¨λ ꡬνκ³ , κ° μμμ λν΄ νλ μ΄ ν μ΅λκ°μ λ½λλ€.
βπ»λ΄ μ½λ1 - μ€λ΅μ½λ
package BOJ;
import java.util.Arrays;
import java.util.Scanner;
public class boj_17281 {
static int n, max = 0;
static int[][] inning;
static boolean[] visited = new boolean[10];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
inning = new int[n][9];
for(int i=0; i<n; i++) {
for(int j=0; j<9; j++) {
inning[i][j] = sc.nextInt();
}
}
sc.close();
// νμ μμλ₯Ό κ³ λ €νμ§ μμ νλ μ΄ - μ€λ₯μ½λ
for(int i=0; i<n; i++) {
if(out >= 3) break;
while(true) {
if(idx >= 9) idx = 0;
// μ ν¨νμΌ λ
if(inning[i][idx] != 0) {
for(int k=3; k>=1; k--) {
if(base[k] > 0) {
base[k] = 0;
if(k + inning[i][idx] > 3) score += 1;
else {
base[k+inning[i][idx]] = 1;
}
}
}
if(inning[i][idx] == 4) score += 1;
else base[inning[i][idx]] = 1;
idx += 1;
}
// μμμΌ λ
else {
idx += 1;
out += 1;
break;
}
}
}
System.out.println(max);
}
}
βμ²μμλ μμμ λν κ³ λ €λ₯Ό μ ν νμ§ μκ³ κ·Έλ₯ μμλλ‘ κ²μμ μ§ννλ€. κ²μ νλ μ΄ μ , νμ μμλ₯Ό 미리 μ ν΄μΌ νλ€.
βοΈμμ΄μ μ΄μ©νμ¬ λͺ¨λ μμλ₯Ό ꡬν λ€, κ²μμ μ§ννκ³ νλ μ΄ μ€ μ μΌ ν° μ μλ₯Ό μ μ₯νλ€.
βοΈorder()
ν¨μλ₯Ό μ΄μ©νμ¬ μμ΄λ‘ μ μμ λͺ¨λ μμλ₯Ό κ΅¬ν΄ runners[]
λ°°μ΄μ μ μ₯νλ€.(4λ²νμ 1λ²μ μλ‘ κ³ μ )
βοΈrunners[]
λ°°μ΄μ μ΄μ©νμ¬ νμμ μ νλ€. (4λ²νμ 1λ²μ μλ‘ κ³ μ )
βοΈμ ν¨νμ μμμΌ λλ₯Ό ꡬλΆνμ¬ νμμ μμλ μ μ§ν μ± base[]
λ°°μ΄μ μ΄μ©νμ¬ κ° 1루,2루,3루μ μ£Όμκ° μλμ§ κ²μ¬νκ³ μν μμ λ°λΌ μ»λ μ μλ₯Ό κ³μ°ν΄μ€λ€.
βπ»λ΄ μ½λ2 + κ°μ
package BOJ;
import java.util.Arrays;
import java.util.Scanner;
/*
* 2021.01.18 daily algo/commit
*
* Brute Force
* λ¬Έμ μ λν κΈ°λ³Έμ μΈ μ΄ν΄!
* - ν μ΄λμ 3μμμ΄ λκΈ° μ κΉμ§ λ°λ³΅λλ€.
* - 3μμ μ μ£Όμλ μ΄κΈ°νλλ€.
* - λ€μ μ΄λμΌλ‘ λμ΄κ° λ νμμ μμλ μ μ§λλ€.
*/
public class boj_17281 {
static int n, max = 0;
static int[][] inning;
static int[] runners;
static boolean[] visited = new boolean[10];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
inning = new int[n][9];
for(int i=0; i<n; i++) {
for(int j=0; j<9; j++) {
inning[i][j] = sc.nextInt();
}
}
sc.close();
runners = new int[10]; // νμ¬ νμ μμ
runners[4] = 1; // 4λ²νμλ 무쑰건 1λ²μ μ
order(9, 1, 2, runners);
System.out.println(max);
}
// μ μ μμ μ νκΈ°
public static void order(int n, int r, int start, int[] runners) {
if(r == 9) {
max = Math.max(max, play(runners));
return;
}
for(int i=2; i<=9; i++) {
if(!visited[i]) {
visited[i] = true;
if(r >= 4) {
runners[r+1] = i;
}
else runners[r] = i;
order(n, r+1, i+1, runners);
visited[i] = false;
}
}
}
public static int play(int[] runners) {
int idx = 1; // μμ
int[] base = new int[4]; // νμ¬ λ² μ΄μ€μ μλ μ μ
base[0] = 1;
int out = 0; // μμ μ
int score = 0; // νμ¬ μ μ
for(int i=0; i<n; i++) {
while(true) {
if(idx > 9) idx = 1;
// μ ν¨νμΌ λ
if(inning[i][runners[idx]-1] != 0) {
int hits = inning[i][runners[idx]-1];
for(int k=3; k>=0; k--) {
if(k + hits > 3) {
score += base[k];
}
else base[k + hits] = base[k];
if(k == 0) base[k] = 1;
else base[k] = 0;
}
idx += 1;
}
// μμμΌ λ
else {
idx += 1;
out += 1;
if(out >= 3) {
out = 0; // μμ νμ μ΄κΈ°ν
Arrays.fill(base, 0);
base[0] = 1;
break;
}
}
}
}
return score;
}
}
π‘base[]
λ°°μ΄μ μ΄μ©νμ¬ μν μ μμ λ°λΌ μ μλ₯Ό κ³μ°νλ κ²μ΄ ν·κΉλ Έλ€. 3 -> 2 -> 1루 μμΌλ‘ μ£Όμκ° μλμ§ μλμ§λ₯Ό κ²μ¬νκ³ μ£Όμκ° μμΌλ©΄ 1, μμΌλ©΄ 0μΌλ‘ νννλ κ³Όμ μμ μ£Όμκ° νμ ν΅κ³Όν΄ μ μλ₯Ό μ»λ κ²½μ°μ νμ ν΅κ³Όνμ§ λͺ»ν΄ λ² μ΄μ€μ λ¨μμλ κ²½μ°λ₯Ό λλμλ€.
μ΄ λ, μ£Όμκ° μμ§μ΄λ©΄ κ·Έ μ μ 0μΌλ‘ λ§λ€μ΄μ£Όλ λ‘μ§μ λ κ²½μ° λͺ¨λ μ§μ£Όμ΄μΌ νλλ° ν κ²½μ°λ§ ν΄λΉνκ² ν΄μ μκ°μ λ§μ΄ λλΉνλ€.. γ
.γ
λλ²κΉ
μ νμ°Έμ ν΄λ³΄κ³ λμμΌ μ μ μκ° μ λλ‘ μ°νμ§ μμλμ§ μμμ±λ€..
π‘λ¬Έμ μ λν μ΄ν΄κ° μμ§λ νμ°Έ λΆμ‘±ν κ² κ°λ€! λΉ λ₯΄κ² λ¬Έμ λ₯Ό μ κ·Όνλ κ² λ³΄λ€ μ²μ²ν λ¬Έμ μμ κ·μΉμ μλ²½ν νμ ν νμ μ κ·Όνλ μ΅κ΄μ λ€μ΄μ.