https://www.acmicpc.net/problem/1041
어떻게 풀까 매우 고민했었다. 정육면체의 한면의 최솟값을 구하고 x6을 할까 생각을 했었다.
하지만 정육면체중 한면, 두면, 세면만 보이는 작은 정육면체의 갯수를 구하고 그 합들을 더하기로 했다.
먼저 한면만 보이는 정육면체이다.
먼저 내가 생각한 로직은 맨 위 한줄과 그 밑의 정육면체의 갯수를 구하고 그 한줄을 뺀 나머지 밑에 있는 정육면체의 갯수를 구한뒤 더하자고 생각했다
그래서 맨위 한줄의 정육면체중 한면만 보이는 사각형의 갯수는 (n-2) * (n-2)이라는 공식을 알게됐다.
그리고 그 밑줄에만 있는 사각형들은 한면에 총 (n-2) * (n-1)개이다. 하지만 총 4면이 있으니 x4를 하게 됐다.
두면이 보이는 정육면체의 갯수를 구한다.
한면만 보이는 정육면체의 로직과 같이 맨위에 한줄, 그 밑에있는 정육면체들의 갯수를 구하기로 했다.
맨 위에 있는 정육면체들은 각 꼭지점에 있는 정육면체를 제외하고는 모두 두면이 보이는 정육면체이므로 한줄에
(n-2)개가 있다. 총 4줄이 있으니 4*(n-2)개를 한뒤
그 밑에 있는 정육면체들은 그림에도 알 수 있듯이 맨위에 있는 정육면체를 제외하고 (n-1)*4개 이다.
이것합쳐서 총 4*(n-2) + (n-1)*4 개이다.
마지막으로 세면이 보이는 정육면체이다.
n이 어느수든 무조건 4개밖에 없으므로 크기는 4로 고정했다.
이렇게 1,2,3면이 보이는 갯수를 구해 다 더하기로 했다.
밑에는 정답코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
long n = Integer.parseInt(br.readLine());
long scene[] = new long[3];
scene[0] = (n-2)*(n-2) + ( 4*(n-2)*(n-1) ) ; // 한면만 보이는 갯수
scene[1] = ( 4*(n-2) ) + ( 4*(n-1) ); // 두면만 보이는 갯수
scene[2] = 4; // 세면만 보이는 갯수
int arr[] = new int[6];
long num = 0;
long sum = 0;
long min;
String s[] = br.readLine().split(" ");
for (int i = 0; i < 6; i++) {
arr[i] = Integer.parseInt(s[i]);
} // for
if (n==1) {
Arrays.sort(arr);
min = arr[0];
for (int i = 0; i < arr.length-1; i++) {
sum += arr[i];
} //for
} else {
min = arr[0];
//한면만 보이는 총 합
for (int i = 0; i < arr.length; i++) {
min = Math.min(min, arr[i]);
} //for
sum += min*scene[0]; //한면만 보이는 총 합
// 두면이 보이는 총합
min = Long.MAX_VALUE;
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
if (i+j != 5) {
min = Math.min(min, arr[i]+arr[j]);
} //if
} // for
} // for
sum+= min*scene[1]; // 두면이 보이는 총합
for (int i = 0; i < 3; i++) {
num += Math.min(arr[i], arr[5-i]);
} // for
sum+= num*scene[2];
}// if else
System.out.println(sum);
} // main
} // class
'BOJ, Programmers' 카테고리의 다른 글
[Java] 프로그래머스 (이중우선 순위 큐 ) (0) | 2024.04.05 |
---|---|
[Java] 백준 2822 (점수 계산) (0) | 2024.04.05 |
[Java] 백준 1500 (최대곱) (0) | 2024.04.03 |
[Java] 백준 1010번 (다리놓기) (0) | 2024.03.30 |
[Java] 백준 1012번 (유기농 배추) (0) | 2024.03.30 |