๋ฌธ์
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ด๋ ์ 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);
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BruteForce' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 4012๋ฒ ์๋ฆฌ์ฌ, [๋ฐฑ์ค] 14889๋ฒ ์คํํธ์ ๋งํฌ (0) | 2021.08.18 |
---|---|
[๋ฐฑ์ค] 2961๋ฒ ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์ (0) | 2021.08.17 |
[SWEA] 6808๋ฒ ๊ท์์ด์ ์ธ์์ด์ ์นด๋๊ฒ์(java) (0) | 2021.08.13 |
[๋ฐฑ์ค] 17135๋ฒ ์บ์ฌ๋ํ์ค (java) (0) | 2021.08.13 |
[๋ฐฑ์ค] 15686๋ฒ ์นํจ๋ฐฐ๋ฌ ( java) (0) | 2021.08.13 |