
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2116
2116๋ฒ: ์ฃผ์ฌ์ ์๊ธฐ
์ฒซ์ค์๋ ์ฃผ์ฌ์์ ๊ฐ์๊ฐ ์ ๋ ฅ๋๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ๋ ํ ์ค์ ํ๋์ฉ ์ฃผ์ฌ์์ ์ข ๋ฅ๊ฐ 1๋ฒ ์ฃผ์ฌ์๋ถํฐ ์ฃผ์ฌ์ ๋ฒํธ ์์๋๋ก ์ ๋ ฅ๋๋ค. ์ฃผ์ฌ์์ ์ข ๋ฅ๋ ๊ฐ ๋ฉด์ ์ ํ์ง ์ซ์๊ฐ ๊ทธ๋ฆผ1์ ์๋
www.acmicpc.net
๋์ด๋

์๊ฐ์ ํ
2์ด
๋ฌธ์
์ฒ์๋ ์ฌ๋ฌ ์ข ๋ฅ์ ์ฃผ์ฌ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋์ด๋ฅผ ํ๊ณ ์๋ค. ์ฃผ์ฌ์์ ๋ชจ์์ ๋ชจ๋ ํฌ๊ธฐ๊ฐ ๊ฐ์ ์ ์ก๋ฉด์ฒด์ด๋ฉฐ ๊ฐ ๋ฉด์๋ 1๋ถํฐ 6๊น์ง์ ์ซ์๊ฐ ํ๋์ฉ ์ ํ์๋ค. ๊ทธ๋ฌ๋ ๋ณดํต ์ฃผ์ฌ์์ฒ๋ผ ๋ง์ฃผ ๋ณด๋ ๋ฉด์ ์ ํ ์ซ์์ ํฉ์ด ๋ฐ๋์ 7์ด ๋๋ ๊ฒ์ ์๋๋ค.
์ฃผ์ฌ์ ์๊ธฐ ๋์ด๋ ์๋์์๋ถํฐ 1๋ฒ ์ฃผ์ฌ์, 2๋ฒ ์ฃผ์ฌ์, 3๋ฒ ์ฃผ์ฌ์, โฆ ์ ์์๋ก ์๋ ๊ฒ์ด๋ค. ์์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ง์ผ์ผ ํ๋ค: ์๋ก ๋ถ์ด ์๋ ๋ ๊ฐ์ ์ฃผ์ฌ์์์ ์๋์ ์๋ ์ฃผ์ฌ์์ ์๋ฉด์ ์ ํ์๋ ์ซ์๋ ์์ ์๋ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ์ ํ์๋ ์ซ์์ ๊ฐ์์ผ ํ๋ค. ๋ค์ ๋งํด์, 1๋ฒ ์ฃผ์ฌ์ ์๋ฉด์ ์ซ์๋ 2๋ฒ ์ฃผ์ฌ์ ์๋ซ๋ฉด์ ์ซ์์ ๊ฐ๊ณ , 2๋ฒ ์ฃผ์ฌ์ ์๋ฉด์ ์ซ์๋ 3๋ฒ ์ฃผ์ฌ์ ์๋ซ๋ฉด์ ์ซ์์ ๊ฐ์์ผ ํ๋ค. ๋จ, 1๋ฒ ์ฃผ์ฌ์๋ ๋ง์๋๋ก ๋์ ์ ์๋ค.
์ด๋ ๊ฒ ์์ ๋์ผ๋ฉด ๊ธด ์ฌ๊ฐ๊ธฐ๋ฅ์ด ๋๋ค. ์ด ์ฌ๊ฐ๊ธฐ๋ฅ์๋ 4๊ฐ์ ๊ธด ์๋ฉด์ด ์๋ค. ์ด 4๊ฐ์ ์๋ฉด ์ค์์ ์ด๋ ํ ๋ฉด์ ์ซ์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ์ฃผ์ฌ์๋ฅผ ์๊ณ ์ ํ๋ค. ์ด๋ ๊ฒ ํ๊ธฐ ์ํ์ฌ ๊ฐ ์ฃผ์ฌ์๋ฅผ ์์๋๋ฅผ ๊ณ ์ ํ ์ฑ ์์ผ๋ก 90๋, 180๋, ๋๋ 270๋ ๋๋ฆด ์ ์๋ค. ํ ์๋ฉด์ ์ซ์์ ํฉ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์ค์๋ ์ฃผ์ฌ์์ ๊ฐ์๊ฐ ์ ๋ ฅ๋๋ค. ๊ทธ๋ค์ ์ค๋ถํฐ๋ ํ ์ค์ ํ๋์ฉ ์ฃผ์ฌ์์ ์ข ๋ฅ๊ฐ 1๋ฒ ์ฃผ์ฌ์๋ถํฐ ์ฃผ์ฌ์ ๋ฒํธ ์์๋๋ก ์ ๋ ฅ๋๋ค. ์ฃผ์ฌ์์ ์ข ๋ฅ๋ ๊ฐ ๋ฉด์ ์ ํ ์ซ์๊ฐ ๊ทธ๋ฆผ 1์ ์๋ ์ฃผ์ฌ์์ ์ ๊ฐ๋์์ A, B, C, D, E, F์ ์์๋ก ์ ๋ ฅ๋๋ค. ์ ๋ ฅ๋๋ ์ซ์ ์ฌ์ด์๋ ๋น์นธ์ด ํ๋์ฉ ์๋ค. ์ฃผ์ฌ์์ ๊ฐ์๋ 10,000๊ฐ ์ดํ์ด๋ฉฐ ์ข ๋ฅ๊ฐ ๊ฐ์ ์ฃผ์ฌ์๋ ์์ ์ ์๋ค.

์ถ๋ ฅ
์ฒซ์ค์ ํ ์๋ฉด์ ์ซ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
5
2 3 1 6 5 4
3 1 2 4 6 5
5 6 4 1 3 2
1 3 6 2 4 5
4 1 6 5 2 3
์ถ๋ ฅ
29
๋ฌธ์ ํ์ด ๊ณผ์
๋ฌธ์ ์ดํดํ๊ธฐ
๋จผ์ ์ฃผ์ฌ์ ๊ทธ๋ฆผ 1์ ์ดํด๋ณด์.

A์ ๋ฐ๋ ํธ์๋ F, B์ ๋ฐ๋ํธ์๋ D, C์ ๋ฐ๋ํธ์๋ E๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, ์ง์ ๋ง์ถฐ๋ณด๋ฉด A-F, B-D, C-E์ด๋ค.
โ๋งค๋ฒ ์ต์ ์ ์ ํ์ ํ๋ฉด ๊ณผ์ฐ ์ฃผ์ฌ์ ์๋ฉด์ ์ซ์์ ํฉ์ ์ต๋๊ฐ์ ๊ตฌํ ์ ์์๊น?
๋ต์ "์๋๋ค"์ด๋ค.
๊ทธ ์ด์ ๋ ์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์์ ์๋ซ๋ฉด์ผ๋ก 1, ์ฆ ์ต์์ ์๋ฅผ ์ ํํ๋ค๊ณ ํด๋ ๊ทธ์ ์ง์ธ ์๊ฐ 6์ผ๋ก ์ต๋์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ 1๋ถํฐ 6๊น์ง ๊ณ ์ ์์ผ ๊ฐ๋ฉฐ ํด๋น ๊ฒฝ์ฐ์ ๋ฐ๋ฅธ ์ ๋ฉด์ ์ต๋๊ฐ์ ๊ตฌํ ๋ค์ ๊ทธ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํด์ผ ํ๋ค.
์ ๋ ฅ๊ฐ ์ ์ฅํ๊ธฐ
public class BOJ_2116 {
static int[][] dice;
static final int diceCount = 6;
static int[] diceMatch = {5, 3, 4, 1, 2, 0}; // A-F, B-D, C-E
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
dice = new int[N][diceCount];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < diceCount; j++) {
dice[i][j] = Integer.parseInt(st.nextToken());
}
}
}
}
์์์ ์ดํด๋ดค๋ A-F, B-D, C-E๋ฅผ ์ธ๋ฑ์ค๋ก ํํํ๋ฉด 0-5, 1-3, 2-4๊ฐ ๋์ด dicMatch๋ณ์์ ์ ์ฅํ๋ค.
๊ทธ ํ ์ด์ค for๋ฌธ์ ๋๋ฉด์ ์ฃผ์ฌ์์ ์ ๋ณด๋ฅผ dice๋ณ์์ ์ ์ฅํ๋ค.
์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ 1๋ถํฐ 6๊น์ง ๊ณ ์ ์ํค๋ฉฐ ํด๋น ๊ฒฝ์ฐ ์ดํด๋ณด๊ธฐ
int result = 0;
for (int i = 0; i < diceCount; i++) {
int bottom = dice[0][i];
...
for (int j = 1; j < N; j++) {
...
}
result = Math.max(totalMax, result);
}
for๋ฌธ์ ๋๋ฉฐ ์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ๊ณ ์ ์ํจ๋ค.
โ๊ทธ๋ค์์ผ๋ก๋ ์ด๋ค ์ผ์ ํด์ผ ํ ๊น?
1. ํด๋น ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ๋ฐ๋ฅธ ๋ค์ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ index๋ฅผ ๊ตฌํ๋ค.
2. ๋ค์ ์ฃผ์ฌ์ ์๋ซ๋ฉด์ index๋ฅผ ํตํด ํด๋น ์ฃผ์ฌ์์ ์๋ฉด์ index์ ์๋ซ๋ฉด์ index๋ฅผ ์ ์ธํ index๋ฅผ ์ดํด๋ณด๋ฉฐ ์ต๋๊ฐ์ ๊ตฌํ์ฌ ์๋ฉด์ ์ต๋๊ฐ์ ๊ตฌํ๋ค.
์ฆ, ์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ๊ณ ์ ์ํค๋ฉด ๋ค์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค์ ์ฃผ์ฌ์์ ์๋ฉด๊ณผ ์๋ซ๋ฉด์ ์ ํด์ง๊ฒ ๋๋ค.
์๋ก ๋ถ์ด ์๋ ๋ ๊ฐ์ ์ฃผ์ฌ์์์ ์๋์ ์๋ ์ฃผ์ฌ์์ ์๋ฉด์ ์ ํ์๋ ์ซ์๋ ์์ ์๋ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ์ ํ์๋ ์ซ์์ ๊ฐ์์ผ ํ๋ค.
๋ํ ๋ฌธ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์์๋๋ฅผ ๊ณ ์ ํ ์ฑ ์์ผ๋ก ๋๋ฆด ์ ์๋ค๋ ์กฐ๊ฑด์ด ์์ผ๋ฏ๋ก ๋งค ์ฃผ์ฌ์๋ง๋ค ์๋ฉด๊ณผ ์๋ซ๋ฉด์ ์ ์ธํ ๊ฐ ์ค ์ต๋๊ฐ์ ์ฐพ์ผ๋ฉฐ ๋ํด์ฃผ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํ๊ธฐ ์ํ์ฌ ๊ฐ ์ฃผ์ฌ์๋ฅผ ์์๋๋ฅผ ๊ณ ์ ํ ์ฑ ์์ผ๋ก 90๋, 180๋, ๋๋ 270๋ ๋๋ฆด ์ ์๋ค.
index+1๋ฒ์งธ ์ฃผ์ฌ์ ์๋ซ๋ฉด ์ซ์๋ก ๋ค์ ์ฃผ์ฌ์ ์๋ซ๋ฉด index ์ฐพ๊ธฐ
static int findNextBottomIndex(int index, int bottom) {
int nBottomIndex = 0;
for (int i = 0; i < diceCount; i++) {
if (dice[index][i] == bottom) {
nBottomIndex = diceMatch[i];
break;
}
}
return nBottomIndex;
}
์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ๊ณ ์ ์ํค๊ธฐ ๋๋ฌธ์ ๋ ๋ฒ์งธ๋ถํฐ ๋ง์ง๋ง ์ฃผ์ฌ์๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์ฃผ์ฌ์์ 6๋ฉด์ ์ดํด๋ณด๊ณ bottom๊ณผ ๊ฐ์ ์๊ฐ ๋์ค๋ฉด ํด๋น ์ฃผ์ฌ์์ ์๋ฉด์ index๋ฅผ ์๊ฒ ๋๋ค. diceMatch๋ฐฐ์ด์ ํตํด ํด๋น ์ฃผ์ฌ์์ ์๋ซ๋ฉด index๋ฅผ ์ฐพ์ ํ return ํ๋ค.
์๋ซ๋ฉด index๋ฅผ ํตํด ์๋ฉด์ ์ต๋๊ฐ ์ฐพ๊ธฐ
static int findMax(int index, int bottomIndex) {
int max = 0;
for (int i = 0; i < diceCount; i++) {
if (i == bottomIndex || i == diceMatch[bottomIndex]) {
continue;
}
if (max < dice[index][i]) {
max = dice[index][i];
}
}
return max;
}
ํด๋น ์ฃผ์ฌ์์ ์๋ซ๋ฉด๊ณผ ์๋ฉด์ index๋ฅผ ์ ์ธํ ๊ฐ ์ค ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์ต๋๊ฐ์ ์ฐพ์๋ด๊ณ ์ด๋ฅผ return ํ๋ค.
์ต์ข ์ฝ๋
public class BOJ_2116 {
static int[][] dice;
static final int diceCount = 6;
static int[] diceMatch = {5, 3, 4, 1, 2, 0}; // A-F, B-D, C-E
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
dice = new int[N][diceCount];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < diceCount; j++) {
dice[i][j] = Integer.parseInt(st.nextToken());
}
}
int result = 0;
for (int i = 0; i < diceCount; i++) {
int bottom = dice[0][i];
int totalMax = findMax(0, i);
for (int j = 1; j < N; j++) {
int nBottomIndex = findNextBottomIndex(j, bottom);
totalMax += findMax(j, nBottomIndex);
bottom = dice[j][nBottomIndex];
}
result = Math.max(totalMax, result);
}
System.out.println(result);
}
// index+1๋ฒ์งธ ์ฃผ์ฌ์ ์๋ซ๋ฉด ์ซ์๋ก ๋ค์ ์ฃผ์ฌ์ ์๋ซ๋ฉด index ์ฐพ๊ธฐ
static int findNextBottomIndex(int index, int bottom) {
int nBottomIndex = 0;
for (int i = 0; i < diceCount; i++) {
if (dice[index][i] == bottom) {
nBottomIndex = diceMatch[i];
break;
}
}
return nBottomIndex;
}
static int findMax(int index, int bottomIndex) {
int max = 0;
for (int i = 0; i < diceCount; i++) {
if (i == bottomIndex || i == diceMatch[bottomIndex]) {
continue;
}
if (max < dice[index][i]) {
max = dice[index][i];
}
}
return max;
}
}
์ฒซ ๋ฒ์งธ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ 1๋ถํฐ 6๊น์ง ๊ณ ์ ์ํค๋ฉฐ ์ ๋ฉด์ ์ต๋๊ฐ์ ๊ตฌํ ๋ค ๊ทธ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ค.

'๐ฏPS - Baekjoon, etc > ๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค] ๊ฒ์ ๊ฐ๋ฐ (Java) (0) | 2023.03.06 |
---|---|
[์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค] ์์ค์ ๋์ดํธ (Java) (0) | 2023.03.04 |
๋๊ธ