[๋ฌธ์ ]
[ํ์ด]
N์ด 1์ผ ๋, N์ด 2์ผ ๋, N์ด 3์ผ ๋๋ฅผ ์์ผ๋ก ๊ทธ๋ ค๋ณด๋ฉฐ ๊ท์น์ ์ฐพ์๋ค. ์๋ ๊ทธ๋ฆผ ์ฐธ์กฐ.
์ฆ, N์ด 1์ผ ๋๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ ์ธํ๊ณ 5๊ฐ๋ฅผ ๋ํด์ฃผ๋ฉด ๋๊ณ ,
N์ด 1๋ณด๋ค ํด ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ณต์์ด ์์๋ค.
- ๋ฉด์ด 3๊ฐ ๋ณด์ด๋ ์ฃผ์ฌ์ ๊ฐ์: 4
- ๋ฉด์ด 2๊ฐ ๋ณด์ด๋ ์ฃผ์ฌ์ ๊ฐ์: (N-1)*4 + (N-2)*4
- ๋ฉด์ด 1๊ฐ ๋ณด์ด๋ ์ฃผ์ฌ์ ๊ฐ์: (N-2)*(N-2) + (N-2)*(N-1)*4
๊ณต์์ ๊ตฌํด์ ํ์๋๋ฐ ๊ณ์ ํ๋ ธ์ต๋๋ค๊ฐ ๋ด๋ค. ์์ธ์ ์ฐพ์๋ณด๋ ์ฃผ์ฌ์๋ฅผ ๋ฌด์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ฒ ์๋ชป๋์๋ค.
์ฆ, ์ฃผ์ฌ์ ๊ฐ์ A B C D E F ๋ก ์์๋๋ก ์ฃผ์ด์ง๊ณ ๋ฌธ์ ์์ ํ๋ฉด๋ ์ฒ๋ผ ๋ฐฐ์น๋๋ค. ์ด ๋, ๋ง์ฃผ๋ณด๋ ๋ณ(A-F, B-E, C-D)์ด ์๊ฒจ์ ์์ํฉ2๊ฐ, ์์ํฉ3๊ฐ๋ ๋จ์ํ ์ ๋ ฌ๋ก ํด๊ฒฐ๋๋ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ์๋ ๊ทธ๋ฆผ ์ฐธ์กฐ!!!
๋ฐ๋ผ์, 1๊ฐ ์ต์ํฉ, 2๊ฐ ์ต์ํฉ, 3๊ฐ ์ต์ํฉ์ ๋ฐ๋ก ๊ตฌํ๊ณ ๊ทธ ๊ฐ์๋งํผ์ ๊ณฑํด์ฃผ๋ฉด ๋๋ค.
์ต์ํฉ์ 3์ค for๋ฌธ์ผ๋ก ๋ง์ฃผ๋ณด๋ ๋ฉด์ index๋ฅผ ๋ํ์ ๋ 5๊ฐ ๋๋ฏ๋ก index1 + index2 == 5 ์ผ ๋, index1 + index3 == 5 ์ผ ๋, index2 + index3 == 5์ผ ๋๋ฅผ ์ ์ธํ๊ณ ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
๋ง์ง๋ง์ผ๋ก !!! N์ 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ฏ๋ก intํ ์๋ฃํ์ ์ฐ๋ฉด ์๋๋ค. ์๋ฃํ์ long long ํ์ ์จ์ค์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ฐ ์ค์์๋ long long ํ์ผ๋ก ๋ฐ๊ฟ์ ์ฐ์ฐ์ ๊ณ์ํด๋๊ฐ์ผ ์ด์ํ ์ซ์๊ฐ ์๋์จ๋ค.
[๋ฐ๋ก]
#์์
1 50 50 50 50 2
#๋ต
608
- 1๊ฐ ์ต์ํฉ: 1
- 2๊ฐ ์ต์ํฉ: 51
- 3๊ฐ ์ต์ํฉ: 101(53 ์๋!)
[์ฝ๋]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long FindMinCase(int n, vector<int> &dice);
int main() {
int n = 0;
vector<int> dice;
cin >> n;
int num = 0;
for (int i = 0; i < 6; i++) {
cin >> num;
dice.push_back(num);
}
//sort(dice.begin(), dice.end()); //*****์ฃผ์ฌ์ ๊ฐ ์์น๊ฐ ์ ํด์ ธ ์์ด์ ๋ฌด์์ ์ ๋ ฌํ๋ฉด ์๋จ!!
if (n > 1) {
cout << FindMinCase(n, dice);//์ฃผ์ฌ์ ์ซ์๊ฐ ์ต์๋ก ๋ณด์ผ ์ ์๋ ๊ฒฝ์ฐ ์ฐพ๊ธฐ
}
else {
sort(dice.begin(), dice.end());
int sum = 0;
for (int i = 0; i < dice.size() - 1; i++) {
sum += dice[i];
}
cout << sum;
}
return 0;
}
long long FindMinCase(int n, vector<int> &dice) {
int sum1 = 50;//๋ฉด์ด 1๊ฐ์ผ ๋ ์ต์ํฉ
int sum2 = 100;//๋ฉด์ด 2๊ฐ์ผ ๋ ์ต์ํฉ
int sum3 = 150;//๋ฉด์ด 3๊ฐ์ผ ๋ ์ต์ํฉ
for (int i = 0; i < dice.size(); i++) {
if (sum1 > dice[i]) sum1 = dice[i];
for (int j = i + 1; j < dice.size(); j++) {
if (i + j == 5) continue;//๋ง์ฃผ๋ณด๋ ๋ฉด์ ํจ๊ป ๊ตฌํ ์ ์์
if (sum2 > dice[i] + dice[j]) sum2 = dice[i] + dice[j];
for (int k = j + 1; k < dice.size(); k++) {
if (j + k == 5 || i + k == 5) continue;//๋ง์ฃผ๋ณด๋ ๋ฉด์ ํจ๊ป ๊ตฌํ ์ ์์
if (sum3 > dice[i] + dice[j] + dice[k]) sum3 = dice[i] + dice[j] + dice[k];
}
}
}
long long result = 0;
//๋ฉด1๊ฐ๊ฐ ๋ณด์ด๋ ๊ฐ์๋งํผ ๊ณฑํด์ฃผ๊ธฐ
result += sum1 * ((long long)(n - 2)*(n - 2) + ((long long)(n - 2)*(n - 1) * 4));
//๋ฉด2๊ฐ๊ฐ ๋ณด์ด๋ ๊ฐ์๋งํผ ๊ณฑํด์ฃผ๊ธฐ
result += sum2 * ((n - 2) * 4 + ((n - 1) * 4));
//๋ฉด3๊ฐ๊ฐ ๋ณด์ด๋ ๊ฐ์๋งํผ ๊ณฑํด์ฃผ๊ธฐ
result += sum3 * 4;
return result;
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][BAEKJOON] 9613๋ฒ GCDํฉ (0) | 2022.04.02 |
---|---|
[C++][Baekjoon][BFS ํ์] 2206๋ฒ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ์์ธ ํด์ค (0) | 2021.10.16 |
[C++][BAKJOON][์ํ] 1541๋ฒ ์์ด๋ฒ๋ฆฐ ๊ดํธ ํ์ด & ๋ฐ๋ก (0) | 2021.10.11 |
[C++][BAEKJOON][Bruteforce] 2580๋ฒ ์ค๋์ฟ ํ์ด & ๋ฐ๋ก (0) | 2021.10.11 |
[C++][BAEKJOON][TREE&DP] 2533๋ฒ ์ฌํ๋ง ์๋น์ค(SNS) (0) | 2021.10.04 |