๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm/๐Ÿ•‍๐Ÿฆบ ๋ฐ”ํ‚น๋… ๊ฐœ๋…

[0x03] ๋ฐฐ์—ด

by nitronium102 2023. 6. 20.

๋ฐฐ์—ด

์ •์˜

๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์›์†Œ๋ฅผ ์—ฐ์†ํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

์„ฑ์งˆ

  • O(1)์— k๋ฒˆ์งธ ์›์†Œ๋ฅผ ํ™•์ธ/๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์ถ”๊ฐ€์ ์œผ๋กœ ์†Œ๋ชจ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘ overhead๊ฐ€ ๊ฑฐ์˜ ์—†์Œ
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฏ€๋กœ cache hit rate๊ฐ€ ๋†’์Œ
  • ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†ํ•œ ๊ตฌ๊ฐ„์„ ์žก์•„์•ผ ํ•ด์„œ ํ• ๋‹น์— ์ œ์•ฝ์ด ๊ฑธ๋ฆผ

์—ฐ์‚ฐ

  • ์ž„์˜์˜ ์œ„์น˜ ์›์†Œ ํ™•์ธ/๋ณ€๊ฒฝ : O(1)
  • ์›์†Œ๋ฅผ ๋์— ์ถ”๊ฐ€ / ๋งˆ์ง€๋ง‰ ์›์†Œ ๋ณ€๊ฒฝ : O(1)
  • ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ ์ถ”๊ฐ€/์ œ๊ฑฐ : O(N) → ๋’ค์— ์›์†Œ๋“ค ํ•œ ์นธ ๋’ค๋กœ ๋ฐ€์–ด์•ผ ํ•จ

์ดˆ๊ธฐํ™”

์ „์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•  ๊ฒฝ์šฐ int๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”

์ง€์—ญ๋ณ€์ˆ˜๋Š” ์“ฐ๋ ˆ๊ธฐ๊ฐ’ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— { } ๋“ฑ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ

int a[21];
int b[21][21];
  1. memset (๋น„์ถ”์ฒœ)
memset(a, 0, sizeof a);
memset(b, 0, sizeof b);
  1. for
for (int i=0; i<21; i++) a[i] = 0;

for (int i=0; i<21; i++)
	for (int j=0; j<21; j++)
		b[i][j] = 0;
  1. fill (์ถ”์ฒœ) : algorithm ํ—ค๋”
fill(a, a+21, 0);
for (int i=0; i<21; i++)
	fill(b[i], b[i] + 21, 0);

Vector

  1. insert → O(N)
v.insert(v.begin() + start_idx, value);
  1. delete → O(N)
v.erase(v.begin() + start_idx);
  1. vector์—์„œ์˜ =๋Š” deep copy → ๋ณต์‚ฌ๋ณธ ๋ฐ”๊ฟ”๋„ ์›๋ณธ์— ์˜ํ–ฅ X

range-based for loop

  1. ๋ณต์‚ฌ๋ณธ
for (int num : numbers) -> num ๊ฐ’ ๋ฐ”๊ฟ”๋„ numbers์— ์˜ํ–ฅ X
  1. ์›๋ณธ
for (int& num : numbers) -> num ๊ฐ’ ๋ฐ”๊พธ๋ฉด numbers์— ๋ฐ˜์˜

for loop : ์ž˜๋ชป๋œ ์˜ˆ์‹œ

๊ธฐ๋ณธ์ ์œผ๋กœ vector.size()๋Š” unsigned int์ž„

(unsigned int) 0 - (int) 1 → overflow ๋ฐœ์ƒ

for (int i=0; i<=v1.size() - 1; i++)
	cout << v[i] << ' ';

๋Œ“๊ธ€