์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BOJ

[๋ฐฑ์ค€2309] - ์ผ๊ณฑ๋‚œ์Ÿ์ด(C++)

kite707 2021. 1. 11.

https://www.acmicpc.net/problem/2309

 

2309๋ฒˆ: ์ผ๊ณฑ ๋‚œ์Ÿ์ด

์•„ํ™‰ ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‚œ์Ÿ์ด๋“ค์˜ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ํ‚ค๋Š” 100์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๊ฐ€๋Šฅํ•œ ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

์•„์ด๋””์–ด

 

์•„ํ™‰ ๋‚œ์Ÿ์ด์˜ ํ‚ค๋ฅผ ๋ชจ๋‘ ๋ฒกํ„ฐ์— ๋„ฃ์€ ๋’ค ํ•ฉ(sum)์„ ๊ตฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  sum๊ณผ 100์˜ ์ฐจ๋ฅผ ๊ตฌํ•ด n1์ด๋ผ ํ•˜์ž. ๊ทธ๋Ÿฐ ๋’ค ์ด์ค‘ ํฌ๋ฌธ์„ ์ด์šฉํ•ด ๋ฒกํ„ฐ์˜ ๊ฐ’ ์ค‘ 2๊ฐœ๋ฅผ ๊ณจ๋ผ ๋”ํ•œ ๊ฐ’์ด n1์ผ๋•Œ ์ด์ค‘ํฌ๋ฌธ์„ ํƒˆ์ถœํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฒกํ„ฐ์—์„œ ํ•ด๋‹น ์›์†Œ๋“ค์„ ์ง€์›Œ์ค€ ๋’ค ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

 

์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

i=0~7, j=i+1~8์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ด์ค‘ ํฌ๋ฌธ์„ ๋งŒ๋“ค์–ด ์œ„์™€ ๊ฐ™์ด ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐ€๋ฉฐ n1๊ณผ ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค. i๋Š” ์ง„ํ•œ ํŒŒ๋ž‘, j๋Š” ํŒŒ๋ž€์ƒ‰ ๋ถ€๋ถ„์ด๋‹ค.

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;

int main() {
	int a, b, c, d, e,f,g,h,i;
	cin >> a >> b >> c >> d >> e>>f>>g>>h>>i;
	vector<int> v2{ a, b, c, d, e,f,g,h,i};
	int sum,n1;
	sum = accumulate(v2.begin(), v2.end(), 0);
	n1 = sum - 100;

	for (int i = 0; i < 8; i++) {
		for (int j = i + 1; j < 9; j++) {
			if (v2[i] + v2[j] == n1) {
				v2.erase(v2.begin() + i); //์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ i์ธ ์š”์†Œ๋ฅผ ์ง€์šด๋‹ค.
				v2.erase(v2.begin() + j-1); //i๋Š” ๋ฌด์กฐ๊ฑด j๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ j-1๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ง€์›Œ์•ผ ํ•œ๋‹ค.
				i = 8;//์ด์ค‘ for๋ฌธ ํƒˆ์ถœ     //์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ i์ธ ์š”์†Œ๋ฅผ ์ง€์šฐ๊ณ  ๋‚˜๋ฉด ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋„ 1์ด ์ค„์–ด๋“ ๋‹ค.
				break;//์ด์ค‘ for๋ฌธ ํƒˆ์ถœ     //์ฆ‰ j๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ง€์šฐ๋ฉด ์ฐพ์€ ๊ฐ’ ๋’ค์˜ ์›์†Œ๋ฅผ ์ง€์šฐ๊ฒŒ ๋œ๋‹ค.
			}
		}
	}
	
	sort(v2.begin(), v2.end()); //์ผ๊ณฑ ๋‚œ์Ÿ์ด์˜ ํ‚ค๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฒกํ„ฐ๋ฅผ ์ •๋ ฌ
	for (int i = 0; i < 7; i++) {  //ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅ
		cout << v2[i] << '\n';
	}

}

 

์ด๋ก  ์ •๋ฆฌ

 

๋ธŒ๋ฃจํŠธ ํฌ์Šค(brute force)

brute : ๋ฌด์‹ํ•œ   force : ํž˜

-> ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ง์ ‘ ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•

 

#include <algorithm>

-> sortํ•จ์ˆ˜ ์‚ฌ์šฉ ์œ„ํ•จ

vector<int> v{ 2, 1, 3 ,0 };
sort(v.begin(), v.end());
// v{0, 1, 2, 3}

 

#include <numeric>

->accumulateํ•จ์ˆ˜ ์‚ฌ์šฉ ์œ„ํ•จ

vector<int> v{1, 3, 9, 2}
sum = accumulate(v2.begin(), v2.end(), 0); //accumulate(๋ฒ”์œ„ ์‹œ์ž‘, ๋ฒ”์œ„ ๋, ํ•ฉ์˜ ์ดˆ๊ธฐ๊ฐ’)
//sum = 15

 

๋Œ“๊ธ€