mooon๐ŸŒ™
STUDY
mooon๐ŸŒ™
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (170)
    • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (147)
      • ๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (53)
      • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Lv1 (13)
      • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ž…๋ฌธ (54)
      • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] SQL ๊ณ ๋“์  Kit (27)
    • BACK (4)
      • Spring (3)
      • PHP (0)
    • FRONT (5)
    • DevOps (8)
      • Jenkins (8)
    • GitHub๐ŸŒฑ (2)
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (1)
      • SQL (1)
    • Error ๐Ÿ’ฅ (0)
      • php (2)
    • ๐Ÿ˜‹ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • โญ ๊นƒํ—ˆ๋ธŒ
  • ๐Ÿ’• ๋ฐฉ๋ช…๋ก
  • ๐Ÿ’ฅ ํƒœ๊ทธ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • SQL
  • c++
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • DevOps
  • ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ž…๋ฌธ
  • SQL ๊ณ ๋“์  Kit
  • Python
  • ๋ฐฑ์ค€

์ตœ๊ทผ ๊ธ€

250x250
hELLO ยท Designed By ์ •์ƒ์šฐ.
mooon๐ŸŒ™

STUDY

๋ฐฑ์ค€ 14889 _ ์Šคํƒ€ํŠธ์™€ ๋งํฌ
์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ/๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 14889 _ ์Šคํƒ€ํŠธ์™€ ๋งํฌ

2021. 1. 9. 17:56
728x90

www.acmicpc.net/problem/14889

 

14889๋ฒˆ: ์Šคํƒ€ํŠธ์™€ ๋งํฌ

์˜ˆ์ œ 2์˜ ๊ฒฝ์šฐ์— (1, 3, 6), (2, 4, 5)๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋ฉด ๋˜๊ณ , ์˜ˆ์ œ 3์˜ ๊ฒฝ์šฐ์—๋Š” (1, 2, 4, 5), (3, 6, 7, 8)๋กœ ํŒ€์„ ๋‚˜๋ˆ„๋ฉด ๋œ๋‹ค.

www.acmicpc.net


โœจ ๋‚ด ์†Œ์Šค ์ฝ”๋“œ

#include<iostream>
#include <vector>
#include<algorithm>
const int MAX = 2147483647;
using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int stats[20][20];
	
	int N,result=MAX;
	cin >> N;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cin >> stats[i][j];
		}
	}
    

	//๋น„ํŠธ ๋งˆ์Šคํ‚น ๋ฐฉ์‹์œผ๋กœ ํ’‚
    //N=4 ์ผ๋•Œ, 0010 ๋ถ€ํ„ฐ 1111๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ํƒ์ƒ‰
    //N=6 ์ผ๋•Œ, 000100๋ถ€ํ„ฐ 111111๊นŒ์ง€์˜ ์ˆซ์ž
	for (int i = (1 << ((N / 2) - 1)); i < (1 << N); i++) {
		
        //1์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธ
		int bit_count=0;
        //j์˜ ๋น„ํŠธ๊ฐ€ 0๋ถ€ํ„ฐ 1,10,100,1000๊ณผ ๊ฐ™์ด ๋Š˜์–ด๋‚œ๋‹ค
        //์ด ๊ฐ’์„ i์™€ AND์—ฐ์‚ฐ์„ ํ•˜์—ฌ 1์ธ์ง€ ํŒ๋ณ„
        //ex) 0010๊ณผ 01์„ ANDํ•˜๋ฉด 0
        //ex) 0010๊ณผ 10์„ ANDํ•˜๋ฉด 10 -> 1๊ฐœ์ˆ˜ ์ฆ๊ฐ€
		for (int j = 0; j < N;j++) {
			if (i&(1 << j)) {
				bit_count += 1;
			}
		}
        
        //1์˜ ๊ฐœ์ˆ˜๊ฐ€ N์˜ ์ ˆ๋ฐ˜์ธ์ง€ ํ™•์ธ
		if (bit_count != N / 2)continue;
        
        
        //1๊ณผ 0์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์„ ๊ฒฝ์šฐ, 1์„ start๋ฒกํ„ฐ์— 0์„ link๋ฒกํ„ฐ์— ๋„ฃ๋Š”๋‹ค
		vector<int> start, link;
		for (int j = 0; j < N;j++) {
			if (i&(1 << j)) {
				start.push_back(j);
			}
			else {
				link.push_back(j);
			}
		}
		
        //๋ฒกํ„ฐ์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ๊ฐ ํŒ€์˜ ๋Šฅ๋ ฅ์น˜ ํ•ฉ์‚ฐ
		int start_stats = 0, link_stats = 0;
		for (int j = 0; j < N/2; j++) {
			for (int k = 0; k < N/2; k++) {
				start_stats += stats[start[j]][start[k]];
				link_stats+=stats[link[j]][link[k]];
			}
		}
		
        //์ตœ์†Œ๊ฐ’ ๊ตฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœ
		int min_value = start_stats - link_stats;
		if (min_value < 0) min_value *= -1;
		result = min(result, min_value);

	}
	cout << result;


	return 0;
}

 

๐Ÿ™ ๋ฌธ์ œ ํ’€์ด

๋ฐฑ์ค€์˜ ๋ถ„๋ฅ˜๋ฅผ ๋ณด๋‹ˆ ๋ฐฑํŠธ๋ž˜ํŒ…๊ณผ ๋น„ํŠธ๋งˆ์Šคํ‚น ๋ฐฉ์‹์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ๋ฐฑํŠธ๋ž˜ํ‚น๋ณด๋‹ค๋Š” ๋น„ํŠธ๋งˆ์Šคํ‚น๊ฐ€ ํšจ์œจ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๋น„ํŠธ ๋งˆ์Šคํ‚น ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค

 

 

๐ŸŒฑ ๋น„ํŠธ๋กœ ํƒ์ƒ‰

for (int i = (1 << ((N / 2) - 1)); i < (1 << N); i++) {
	
}

 

N=4์ผ๋•Œ, i๋Š” 0010 ~ 1111๊นŒ์ง€์˜ ์ˆซ์ž ์ฆ‰, 2 ~ 15๋ฅผ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค

N=6์ผ๋•Œ, i๋Š” 000100 ~ 111111๊นŒ์ง€์˜ ์ˆซ์ž ์ฆ‰, 4 ~ 63์„ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค

 

 

๊ทธ๋Ÿฌ๋ฉด 0์˜ ๊ฐœ์ˆ˜์™€ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์„ž์ด๊ฒŒ ๋˜๋Š”๋ฐ

์šฐ๋ฆฌ๋Š” 0๊ณผ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค

 

for (int j = 0; j < N;j++) {
	if (i&(1 << j)) {
		bit_count += 1;
	}
}

 

j๋Š” 0, 01, 10, 100, 1000๊ณผ ๊ฐ™์€ ๋น„ํŠธ๊ฐ’์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค

N=4์ผ๋•Œ, j๋Š” 0, 01, 10, 100, 1000์˜ ๊ฐ’์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  ์ด ๊ฐ’์„ i์™€ ๋น„ํŠธ AND ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค

 

 

๋งŒ์•ฝ i = 2 = 0010 ์ด๊ณ  j=0000์ผ ๊ฒฝ์šฐ, i & j๋Š” 0000์ด ๋œ๋‹ค

j = 0001์ผ ๊ฒฝ์šฐ, i&j๋Š” 0000์ด ๋œ๋‹ค

j = 0010์ผ ๊ฒฝ์šฐ, i&j๋Š” 0010์ด ๋œ๋‹ค ๋”ฐ๋ผ์„œ 1์˜ ๊ฐœ์ˆ˜ ์นด์šดํŠธ + 1์„ ํ•ด์ค€๋‹ค

j = 0100์ผ ๊ฒฝ์šฐ, i&j๋Š” 0000์ด ๋œ๋‹ค

j = 1000์ผ ๊ฒฝ์šฐ, i&j๋Š” 0000์ด ๋œ๋‹ค

 

 

๋”ฐ๋ผ์„œ ์œ„์˜ ๊ฒฝ์šฐ์—๋Š” 1๊ณผ 0์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์Œ i์˜ ๊ฐ’(0011)์„ ํƒ์ƒ‰ํ•ด๋ณด๊ฒŒ ๋œ๋‹ค

 

if (bit_count != N / 2) continue;

 

 

 

๐ŸŒฑ 0๊ณผ 1๋กœ ํŒ€์„ ๋‚˜๋ˆ  ๋Šฅ๋ ฅ์น˜ ๊ณ„์‚ฐํ•˜๊ธฐ

vector<int> start, link;

for (int j = 0; j < N;j++) {
	if (i&(1 << j)) {
		start.push_back(j);
	}
	else {
		link.push_back(j);
	}
}

 

1์˜ ๊ฐœ์ˆ˜์™€ 0์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋™์ผํ•œ i ๊ฐ’์„ ์ฐพ์•„๋‚ด๋ฉด, startํŒ€๊ณผ linkํŒ€์„ ๋ถ„๋ฅ˜์‹œ์ผœ์ฃผ์–ด์•ผํ•œ๋‹ค

 

 

์œ„์—์„œ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์—ฌ, 1์ด๋ฉด start ๋ฒกํ„ฐ์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ 

0์ด๋ฉด link ๋ฒกํ„ฐ์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด์„œ ํŒ€์„ ๋‚˜๋ˆ„๊ฒŒ ๋œ๋‹ค

 

 

์˜ˆ๋ฅผ ๋“ค์–ด, i = 0011์ด๋ผ๋ฉด

j = 0000 (10์ง„์ˆ˜ 0), 0001 (10์ง„์ˆ˜ 1), 0010 (10์ง„์ˆ˜ 2), 0100 (10์ง„์ˆ˜ 3), 1000 (10์ง„์ˆ˜ 4)์˜ ๊ฐ’์„ ์ฐจ๋ก€๋กœ ๊ฐ€์ง€๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์ด ๋Œ์•„๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ 

0011 & 0001 = 0001 ์ด๋ฏ€๋กœ, 1์€ start๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค

0011 & 0010 = 0010 ์ด๋ฏ€๋กœ, 2๋Š” start๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค

0011 & 0100 = 0000 ์ด๋ฏ€๋กœ, 3์€ link๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค

0011 & 1000 = 0000 ์ด๋ฏ€๋กœ, 4๋Š” link๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค

 

 

int start_stats = 0, link_stats = 0;
for (int j = 0; j < N/2; j++) {
	for (int k = 0; k < N/2; k++) {
		start_stats += stats[start[j]][start[k]];
		link_stats+=stats[link[j]][link[k]];
	}
}

int min_value = start_stats - link_stats;
if (min_value < 0) min_value *= -1;
result = min(result, min_value);

 

๋ถ„๋ฅ˜ ํ•œ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ startํŒ€๊ณผ linkํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ด ๋‘ ํŒ€์˜ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋ฉด ๋œ๋‹ค

 

 

 

 

๐ŸŒฑ ๋ฌธ์ œ ํ’€์ด ๊ฒฐ๊ณผ

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ/๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ๋ฐฑ์ค€ 2217 _ ๋กœํ”„
    • ๋ฐฑ์ค€ 11404 _ ํ”Œ๋กœ์ด๋“œ
    • ๋ฐฑ์ค€ 11000 _ ๊ฐ•์˜์‹ค ๋ฐฐ์ •
    • ๋ฐฑ์ค€ 18353 _ ๋ณ‘์‚ฌ ๋ฐฐ์น˜ํ•˜๊ธฐ
    mooon๐ŸŒ™
    mooon๐ŸŒ™
    ๊ฐœ๋ฐœ ๊ณต๋ถ€ ๊ธฐ๋ก

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”