반응형
https://www.acmicpc.net/problem/2116
풀이
주사위 면은 총 6개, 주사위 개수는 최대 10,000개이므로 완전 탐색으로 진행해도 시간제한에 지장이 없다.
주사위 면을 A, B, C 대신 인덱스로 표현하면 아래와 같다.
위 문제의 조건은 아래층 주사위의 윗면과 위층 주사위의 아랫면의 숫자가 같아야한다.
가장 바닥에 올 수 있는 면은 6개의 면 중에서 한 개이므로 1-6까지 반복문을 돌리면서 찾아주면 된다.
아랫면이 정해지면 주사위 맞은 편인 윗면도 알 수 있다.
public static int setTop (int idx) {
if (idx == 0) return 5;
else if (idx == 1) return 3;
else if (idx == 2) return 4;
else if (idx == 3) return 1;
else if (idx == 4) return 2;
else return 0;
}
i번째 층 주사위의 아랫면과 윗면을 알아냈으면 해당 면을 제외한 면 중에 최댓값을 찾으면 된다.
public static int findMax (int bot, int top) {
for (int i=6; i>0; i--) {
if (i != bot && i != top) {
return i;
}
}
return 0;
}
주사위의 제일 큰 값 6부터 내려가면서 찾아서 max 변수에 넣어줬다.
<최종코드>
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine()); // 주사위 개수
int[][] dice = new int[N][6];
for (int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for (int j=0; j<6; j++) {
dice[i][j] = Integer.parseInt(st.nextToken());
}
}
int sum = 0;
int ans = 0;
for (int i=0; i<6; i++) {
int bot = dice[0][i]; // 아랫면
int top = dice[0][setTop(i)]; // 윗면
for (int d=0; d<N; d++) {
int max = 0;
// 주사위 윗면 찾기
for (int k=0; k<6; k++) {
if (dice[d][k] == top) {
bot = top;
top = dice[d][setTop(k)];
// 아랫면 윗면 제외하고 가장 큰 값 찾기
max = findMax(bot, top);
break;
}
}
sum += max;
}
ans = Math.max(ans, sum);
sum = 0;
}
System.out.println(ans);
}
public static int setTop (int idx) {
if (idx == 0) return 5;
else if (idx == 1) return 3;
else if (idx == 2) return 4;
else if (idx == 3) return 1;
else if (idx == 4) return 2;
else return 0;
}
public static int findMax (int bot, int top) {
for (int i=6; i>0; i--) {
if (i != bot && i != top) {
return i;
}
}
return 0;
}
}
반응형
'알고리즘 > 구현 & 그리디 & 브루트포스' 카테고리의 다른 글
[백준]JAVA - 14503번: 로봇 청소기 (0) | 2023.02.16 |
---|---|
[백준]JAVA - 7568번: 덩치 (0) | 2023.02.07 |
[백준]JAVA - 2564번: 경비원 (0) | 2023.01.20 |
[백준]JAVA - 2239번: 스도쿠 (0) | 2023.01.17 |
[백준]JAVA - 17143번: 청소왕 (1) | 2023.01.04 |