๐Ÿ“ Coding Test Study/Algorithm Problem

[C++][BAEKJOON][์ˆ˜ํ•™] 1041๋ฒˆ ์ฃผ์‚ฌ์œ„ ๋ฌธ์ œ ํ’€์ด & ๋ฐ˜๋ก€

ibelieveinme 2021. 10. 11. 03:37
728x90

[๋ฌธ์ œ]

 

1041๋ฒˆ: ์ฃผ์‚ฌ์œ„

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ฃผ์‚ฌ์œ„์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ A, B, C, D, E, F์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. N์€ 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜

www.acmicpc.net

[ํ’€์ด]

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;
}

 

728x90