반응형
https://www.acmicpc.net/problem/2116
2116번: 주사위 쌓기
첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는
www.acmicpc.net


풀이
주사위 면은 총 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 |