Home Week3 - Binary Search, Two Pointer
Post
Cancel

Week3 - Binary Search, Two Pointer

๐Ÿ“ ๋ฌธ์ œ ๋ชฉ๋ก



1. SUPER SUPER BINARY SEARCH DELUXE 2.5: THE LEGEND OF THE GOLDEN MAZASSUMNIDA, EPISODE 2: THE MAZWAETL UNIVERSE, PART 2: THE PARALLEL UNIVERSE AND THE LOST MAZASSUMNIDA: GAME OF THE YEAR EDITION

๊ตฌ๋ฐ๊ธฐ์ปต์€ ๋“ค์–ด๋งŒ ๋ดค์ง€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด(?)๋ณธ ๊ฑด ์ด๋ฒˆ์ด ์ฒ˜์Œ์ด๋‹ค. (๋ฌธ์ œ ์ด๋ฆ„๋ถ€ํ„ฐ๊ฐ€ใ…‹ใ…‹
๋‚ด๊ฐ€ ์ง์ ‘ ์ด๋ถ„ํƒ์ƒ‰๊ธฐ๊ฐ€ ๋˜์–ด ์ •๋‹ต๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ. 1~100 ์‚ฌ์ด์˜ ์ž์—ฐ์ˆ˜๋ฅผ ์จ์„œ ์ œ์ถœํ•˜๋ฉด ์ •๋‹ต๋ณด๋‹ค ํฐ์ง€ ์ž‘์€์ง€ ์ฑ„์  ํ”„๋กœ๊ทธ๋žจ์ด ํผ์„ผํ‹ฐ์ง€๋กœ ์•Œ๋ ค์ค€๋‹ค.

์ฝ”๋“œ

1
๐Ÿ™„๐Ÿ’ญ


2. ๋žœ์„  ์ž๋ฅด๊ธฐ

ํ’€์–ด๋ณธ ์œ ํ˜•์ด๋ผ ํ’€์ด๋Š” ์•Œ๊ณ  ์žˆ์—ˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐˆ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์–ด์„คํ”„๊ฒŒ ์•Œ๊ณ  ์žˆ๋˜ ํƒ“์— ํฌ์ธํ„ฐ ์ด๋™ ์ง€์ ์„ ์ž˜๋ชป ์žก๊ณ โ€ฆ ์ค‘์š”ํ•œ ๋ถ€๋ถ„๋„ ๋นผ๋จน์–ด๋ฒ„๋ ค์„œ ํ•œ์ฐธ ์”จ๋ฆ„ํ–ˆ๋˜ ๋ฌธ์ œ๋‹ค.
์ผ๋‹จ โ€˜์ด๋ถ„ํƒ์ƒ‰ ๋Œ€์ƒ=๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋žœ์„ ์˜ ์ตœ๋Œ€ ๊ธธ์ดโ€™๋กœ ๋‘๊ณ  ๊ทธ ๊ธธ์ด๋กœ ์ž˜๋ž๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๋ฉด์„œ left, right๋กœ ๊ธธ์ด์˜ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๋‚˜๊ฐ€๋Š” ๊ฒƒ๊นŒ์ง€๋Š” ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ left์™€ right๋ฅผ ์˜ฎ๊ธฐ๋‹ค๊ฐ€ ์ •๋‹ต์„ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์ด ๋˜์–ด๋ฒ„๋ฆฌ๋ฉด mid๊ฐ’์ด ๋” ์ด์ƒ ์ •๋‹ต์ด ๋‚˜์˜ฌ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฏ€๋กœ, ๊ทธ๋Ÿฌ๊ธฐ ์ „๊นŒ์ง€ N๊ฐœ ์ด์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด์— ํ•œํ•ด ๊ทธ ๊ฐ’์„ ๋”ฐ๋กœ ์ €์žฅํ–ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ(*๊ผญ ์ด ๋ฐฉ๋ฒ•๋งŒ ์žˆ๋Š”๊ฑด ์•„๋‹ˆ์ง€๋งŒ)
๊ทธ๊ฑธ ๋”ฐ๋กœ ์ €์žฅํ•˜๋Š” ์ƒ๊ฐ์„ ๋ชป ํ•˜๊ณ  ๊ทธ๋ƒฅ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ ํ›„ mid๊ฐ’์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ•ด๋ฒ„๋ฆฐ ๊ฒƒ ๋•Œ๋ฌธ์— ์‹ ๋‚˜๊ฒŒ ์‚ฝ์งˆ์„ ํ–ˆ๋‹ค.
๊ฑฐ๊ธฐ๋‹ค ํฌ์ธํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ์ง€์ ๋„ left๋Š” mid+1๋กœ, right๋Š” mid๋กœ ์žก์•„๋‘๊ณ  ์žˆ์—ˆ๊ณ โ€ฆ
๊ทธ์™€์ค‘์— left, right์˜ ์ดˆ๊ธฐ๊ฐ’์€ ์ดํ•ฉ๊นŒ์ง€ ๊ตฌํ•ด๊ฐ€๋ฉฐ ์‹ ๊ฒฝ์ผ๋Š”๋ฐ left์˜ ๊ฒฝ์šฐ์—” ์˜คํžˆ๋ ค 0์ด ๋  ์ˆ˜๋„ ์žˆ๋Š” ์‹์ด์–ด์„œ-_-; ์“ธ๋ฐ์—†๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ทธ๋ƒฅ ๋‹ค๋ฅธ ํ’€์ด๋“ค์ฒ˜๋Ÿผ left=1, right=์ตœ๋Œ€ ๋žœ์„ ๊ธธ์ด๋กœ ์žฌ์„ค์ •ํ–ˆ๋‹ค.
๋‚œ์ด๋„์— ๋น„ํ•ด ์ •๋‹ต๋ฅ ์ด ์ข€ ๋‚ฎ๊ธฐ๋Š” ํ–ˆ๋‹ค๋งŒโ€ฆ ์ด์ •๋„๋ฉด ์•„์ง ์•Œ๊ณ ์žˆ๋‹ค๊ณ  ํ•˜๊ธฐ๋Š” ์–ด๋ ค์šด๋“ฏํ•˜๋‹ˆ ๋ฌธ์ œ๋“ค์„ ์ข€๋” ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค.

์ฝ”๋“œ๊ฐ€ ๋‘๊ฐ€์ง„๋ฐ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ๋ถ„๋“ค๊ณผ ๋น„์Šทํ•œ ํ’€์ด์ด๊ณ 
๋‘๋ฒˆ์งธ ์ฝ”๋“œ๋Š” ์‚ฝ์งˆํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฐพ์•„๋‚ธ๊ฑด๋ฐ, ๋”ฐ๋กœ ๊ธธ์ด๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋‹ต์„ ๊ตฌํ•œ ๊ฒฝ์šฐ์ด๋‹ค. ์ฐจ์ด์ ์€ ๋ฐ˜๋ณต๋ฌธ ์กฐ๊ฑด๊ณผ ํฌ์ธํ„ฐ ์ด๋™์ง€์ , mid๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ๊ณ„์‚ฐํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>

using namespace std;

int main() {
	int k, n;
	int longest = 0, cnt = 0, res = 0;
	int len[10001];
	long long left, mid, right;

	cin >> k >> n;

	for (int i = 0; i < k; i++) {
		cin >> len[i];
		if (longest < len[i]) longest = len[i];
	}

	left = 1;
	right = longest;
	mid = 0;

	while (left <= right) {
		mid = (left + right) / 2;
		cnt = 0;
		for (int i = 0; i < k; i++) {
			cnt += len[i] / mid;
		}
		if (cnt >= n) {
			if (res < mid) res = mid;
			left = mid + 1;
		}
		else right = mid - 1;
	}

	cout << res;
}

์ฝ”๋“œ #2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>

using namespace std;

int main() {
	int k, n;
	int longest = 0, cnt = 0;
	int len[10001];
	long long left, mid, right;

	cin >> k >> n;

	for (int i = 0; i < k; i++) {
		cin >> len[i];
		if (longest < len[i]) longest = len[i];
	}

	left = 1;
	right = longest;
	mid = 0;

	while (left < right) {
		mid = (left + right + 1) / 2;
		cnt = 0;
		for (int i = 0; i < k; i++) {
			cnt += len[i] / mid;
		}
		if (cnt < n) right = (left + right) / 2;
		else left = mid;
	}

	cout << (left + right) / 2;
}


3. ์šฉ์•ก

์ง„์งœ ๋‹ค ์งœ๋†“๊ณ  ์“ธ๋ฐ์—†์ด ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ๋‹ค. ์ ๊ธฐ๋„ ๋ฏผ๋งํ•  ์ •๋ˆ๋ฐใ…‹ใ…‹ใ…‹์šฉ์•ก์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ ๋•Œ๋ฌธ์— ์ •๋ง ์–ด์ด์—†๋Š” ์‹์„โ€ฆ๐Ÿคฆ
์•”ํŠผ ์ด ๋ฌธ์ œ๋Š” ํˆฌํฌ์ธํ„ฐ ๋ฌธ์ œ์ด๋‹ค. ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์€ ์ด์ง„ํƒ์ƒ‰๊ณผ ๊ฐ™์ง€๋งŒ ์ด์ง„ํƒ์ƒ‰์€ ์ •๋‹ต ์ธ๋ฑ์Šค๋ฅผ ํ–ฅํ•ด ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ขํ˜€๊ฐ€๋Š” ๊ฒƒ์ด๊ณ , ํˆฌํฌ์ธํ„ฐ๋Š” ํ•œ์นธ์”ฉ ํ›‘์œผ๋ฉด์„œ ๊ณ„์‚ฐํ•œ ๊ฐ’ ์ค‘ ์ •๋‹ต ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋„์ค‘์— ์ •๋‹ต์ด ๋‚˜์™”๋”๋ผ๋„ ๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ• ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•œ๋‹ค.
๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ์ด์ง„ํƒ์ƒ‰์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(logn)์ด๊ณ  ํˆฌํฌ์ธํ„ฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํ•œ ๋ง์ด์ง€๋งŒ ์ด์ง„ํƒ์ƒ‰์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํˆฌํฌ์ธํ„ฐ๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ์ •๋ ฌ๋˜์–ด์žˆ์ง€ ์•Š์•„๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

์กฐ๊ธˆ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์ธ ์ˆ˜๋“ค์˜ ํ•ฉ 2 ๋ฌธ์ œ๋ฅผ ์ž ์‹œ ์–ธ๊ธ‰ํ•˜์ž๋ฉด,
์—ฌ๊ธฐ์„œ๋Š” ๋จผ์ € ๋‘ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ™์€ ์œ„์น˜(0๋ฒˆ์งธ)์— ๋‘”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘ ํฌ์ธํ„ฐ ์‚ฌ์ด์˜ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•˜๋Š”๋ฐ, ๋ชจ๋“  ๊ฐ’์ด ์ž์—ฐ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๊ฐ„์˜ ํฌ๊ธฐ ์ฆ๊ฐ์ด ๊ณง ์ดํ•ฉ์˜ ์ฆ๊ฐ์ด ๋œ๋‹ค.
๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ํ•ฉ์ด ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ตฌ๊ฐ„ ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๊ธฐ ์œ„ํ•ด left๋Š” ๋ƒ…๋‘๊ณ  right๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ ๋ฐ€๊ณ , ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ํฌ๋ฉด left๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ์นธ ๋ฐ€๊ณ  right๋Š” ๋ƒ…๋‘๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด์žˆ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๋ฐ˜๋ฉด ์ด ์šฉ์•ก ๋ฌธ์ œ๋Š” ์ •์ˆ˜ํ˜•์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฐ์ดํ„ฐ์—์„œ ๋‘ ํฌ์ธํ„ฐ๋งŒ์˜ ํ•ฉ์„ ๋ณด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์–ด๋Š์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์•ผํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.
๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ์—์„œ๋Š” ์•„์˜ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ฃผ์–ด์กŒ์œผ๋ฉฐ ๋‘ ํฌ์ธํ„ฐ์˜ ์œ„์น˜๋Š” ์–‘์ชฝ ๋์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋‘ ๊ฐ’์˜ ํ•ฉ์ด ์Œ์ˆ˜๋ผ๋ฉด left๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ, ์–‘์ˆ˜๋ผ๋ฉด right๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œ์ผœ ์ ˆ๋Œ€๊ฐ’ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋„๋ก ํ–ˆ๋‹ค.
(์—ฌ๋‹ด์ด์ง€๋งŒโ€ฆ ๋ณ€์ˆ˜ ๋„ค์ด๋ฐ์ด ์ข€ ๋ณ„๋ก ๊ฒƒ๊ฐ™๋‹ค.)

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>

using namespace std;

int main() {
	int n, val[100000], left, right, min_left, min_right, min_val;

	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> val[i];
	}

	left = 0;
	min_left = 0;
	right = n - 1;
	min_right = n - 1;
	min_val = INT32_MAX;

	while (left < right) {
		int total = val[left] + val[right];

		if (abs(total) < abs(min_val)) {
			min_left = left;
			min_right = right;
			min_val = total;
		}
		(total < 0) ? left++ : right--;
	}

	cout << val[min_left] << " " << val[min_right];
}


4. ์„ธ ์šฉ์•ก

ํ†ต๊ณผ๋Š” ํ–ˆ์ง€๋งŒ ์ฒ˜์Œ์— ์ž˜๋ชป ์ƒ๊ฐํ–ˆ๋˜ ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์„ ์ฐพ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๋‹ค.
์šฐ์„  ์œ„ ๋ฌธ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๊ธฐ์„œ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์ฃผ์–ด์ง€๋ฏ€๋กœ ๋จผ์ € algorithm ํ—ค๋”์˜ sort()๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.
๊ทธ๋‹ค์Œ ์ฒซ๋ฒˆ์งธ ํฌ์ธํ„ฐ๋ฅผ 0๋ถ€ํ„ฐ n-3๊นŒ์ง€ ๊ณ ์ •์œผ๋กœ ์ •ํ•ด๋†“๊ณ , ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด

1
2
left์˜ ์ธ๋ฑ์Šค = ์ฒซ๋ฒˆ์งธ ํฌ์ธํ„ฐ์˜ ์ธ๋ฑ์Šค+1
right์˜ ์ธ๋ฑ์Šค = n-1

์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์„ธ ๊ฐ’์˜ ํ•ฉ์˜ ์ ˆ๋Œ€๊ฐ’์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๋‘ ํฌ์ธํ„ฐ ์œ„์น˜๋ฅผ ๊ตฌํ•ด์„œ ์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ–ˆ๋˜ ์ตœ์†Œ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ฐฑ์‹ ํ•˜๋„๋ก ํ–ˆ๋‹ค.
๋‘ ํฌ์ธํ„ฐ์˜ ์ด๋™๋ฐฉ์‹์€ ์œ„ ๋ฌธ์ œ ๊ทธ๋Œ€๋กœ์ด๊ณ  ๊ฑฐ๊ธฐ์— ์ฒซ๋ฒˆ์งธ ๊ฐ’๊นŒ์ง€ ๋”ํ•ด์„œ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n), ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์— ํˆฌํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์ด๋ฏ€๋กœ ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2^)์ด ๋œ๋‹ค.

์ฒ˜์Œ์— ์ž˜๋ชป ์ƒ๊ฐํ–ˆ๋˜ ์ฝ”๋“œ๋Š” ์–ด๋–ค ํ๋ฆ„์ด์—ˆ๋ƒ๋ฉด
๋‘ ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด ์„ธ ๊ฐ’์˜ ํ•ฉ์˜ ์ ˆ๋Œ€๊ฐ’์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์„ธ๋ฒˆ์งธ ํฌ์ธํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋Œ๋ฉด์„œ ์ฐพ๋„๋ก ํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.(๋ฌผ๋ก  ๋‘ ํฌ์ธํ„ฐ๋Š” ์ œ์™ธํ•˜๊ณ )
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์œ„ ๋ฐฉ๋ฒ•์—์„œ๋Š” ์ฒซ๋ฒˆ์งธ ํฌ์ธํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” for๋ฌธ ๋‚ด์— ํˆฌํฌ์ธํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” while๋ฌธ์„ ๋‘์—ˆ๋‹ค๋ฉด ์ด ๋ฐฉ๋ฒ•์€ while๋ฌธ ๋‚ด์— for๋ฌธ์„ ๋‘์—ˆ๋‹ค๋Š” ๊ฑด๋ฐ,
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ํฌ์ธํ„ฐ์˜ ์ด๋™ ์ˆœ์„œ๊ฐ€ ์ •๋‹ต์„ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š” ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ด๋ฒ„๋ฆฐ๋‹คโ€ฆ
์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์‹ถ์€๋ฐ, ์Šค์Šค๋กœ ๋ฐ˜๋ก€๋ฅผ ์ฐพ๊ธฐ๋„ ์‰ฝ์ง€ ์•Š์•˜๋˜๋งŒํผ ์•„์ง์€ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜์—ฌ ์ผ๋‹จ์€ ๋ฐฑ์ค€์—์„œ ์ฐพ์€ ๋ฐ˜๋ก€๋ผ๋„ ๋‚จ๊ฒจ๋†“๋Š”๋‹ค.
(์ถœ์ฒ˜: https://www.acmicpc.net/board/view/62826)

1
2
3
4
5
6
์ž…๋ ฅ: 6
13 14 48 -5 18 -96

๋‹ต: -5 13 14

ํ‹€๋ฆฐ ๋‹ต: -96 18 48

์•„๋ž˜๋Š” ํ†ต๊ณผํ•œ ์ฝ”๋“œ์ด๋‹ค.

์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<algorithm>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, left, right, min_f, min_l, min_r, val[5000];
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> val[i];
	}

	sort(val, val + n);

	min_f = val[0];
	min_l = val[1];
	min_r = val[n - 1];

	for (int first = 0; first < n-2; first++) {
		left = first + 1;
		right = n - 1;

		while (left < right) {
			long long total = (long long)val[first]+val[left]+val[right];

			if (abs(total) < abs((long long)min_f + min_l + min_r)) {
				min_f = val[first];
				min_l = val[left];
				min_r = val[right];
			}

			(total < 0) ? left++ : right--;
		}
	}

	cout << min_f << " " << min_l << " " << min_r;
}
This post is licensed under CC BY 4.0 by the author.

[Unity Graphics Study] 1. Particle System

Week4 - BFS

Comments powered by Disqus.