728x90

๐Ÿ“ Coding Test Study/C++ 26

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๊ธฐ๋ณธ๊ฐœ๋… :: ๋น„ํŠธ๋งˆ์Šคํฌ

1. ์ด์ง„์ˆ˜. Boolean ๋ฐฐ์—ด/๋ฒกํ„ฐ.128 64 32 16 8 4 2 1  1    0   1   1  0 0 0 0(176)0001001000110100010101100111100012345678  2. ๋น„ํŠธ ์—ฐ์‚ฐ์ž&๋น„ํŠธ๋‹จ์œ„๋กœ AND ์—ฐ์‚ฐ|๋น„ํŠธ๋‹จ์œ„๋กœ OR ์—ฐ์‚ฐ^๋น„ํŠธ๋‹จ์œ„๋กœ XOR ์—ฐ์‚ฐ(๊ฐ™์œผ๋ฉด 0, ๋‹ค๋ฅด๋ฉด 1)~ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋ชจ๋“  ๋น„ํŠธ ๋ฐ˜์ „ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ์—ด์„ ์™ผ์ชฝ์œผ๋กœ ์ด๋™>>ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ * 10์ง„์ˆ˜ -> 2์ง„์ˆ˜ ๋ณ€ํ™˜ ์‚ฌ์ดํŠธ Decimal to Binary ConverterDivide by the base 2 to get the digits from the remainders: Divisionby 2 Quotient Remainder(Digit) Bit #www.rapidtable..

ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

๊ฐ€๋” ์ œํ•œ์‹œ๊ฐ„์„ ๋„˜๊ธฐ์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ๋•Œ๊ฐ€ ์žˆ๋‹ค.๊ทธ ๋• ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ฝ”๋“œ ์‹œ์ž‘ ์ „์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false);C์™€ C++ ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ ๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”์‹œํ‚จ๋‹ค. ๋™๊ธฐํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด C++ ์ŠคํŠธ๋ฆผ์ด ์ž์ฒด ๋…๋ฆฝ ๋ฒ„ํผ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๋ฒ„ํผ ์ˆ˜๊ฐ€ ์ค„์–ด์„œ ์‹คํ–‰์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค(+). ๋‹ค๋งŒ ๋ถ€์ž‘์šฉ์€ ๋ชจ๋“  IO์˜ ์ˆœ์„œ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. c ์˜ ์ž…์ถœ๋ ฅ์ฝ”๋“œ์™€ c++ ์˜ ์ž…์ถœ๋ ฅ์ฝ”๋“œ๋ฅผ ํ˜ผ์šฉํ•ด์„œ ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค(-). cin.tie(NULL); cout.tie(NULL);C++ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ cin๊ณผ c..

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๋ˆ„์ ํ•ฉ, Prefix Sum

* ๋ˆ„์ ํ•ฉ: ์–ด๋–ค ๋ฐฐ์—ด์˜ ์•ž ์š”์†Œ๋ถ€ํ„ฐ ๋ˆ„์ ๋œ ํ•ฉ์„ ์ €์žฅํ•œ ๋ฐฐ์—ด. ์•ž์—์„œ๋ถ€ํ„ฐ ๋”ํ•˜๋Š” prefix sum๊ณผ ๋’ค์—์„œ ๋ถ€ํ„ฐ ๋”ํ•˜๋Š” suffix sum ์ด ์žˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ •์  ๋ณ€์ˆ˜์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. * ๋ˆ„์ ํ•ฉ์ด ํ•„์š”ํ•œ ์˜ˆ์‹œ๋ฌธ์ œ ๋ฌธ์ œ ์Šน์ฒ ์ด๋Š” ๋‡Œ๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ๋‹ค. ํ•™๊ต์— ๊ฐ”๋”๋‹ˆ ์„ ์ƒ๋‹˜์ด ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ N๊ฐœ์˜ ์นด๋“œ๋ฅผ ์ฃผ๋ฉฐ M๊ฐœ์˜ ์งˆ๋ฌธ์„ ๋˜์ง„๋‹ค. ๊ทธ ์งˆ๋ฌธ์€ ๋‚˜์—ดํ•œ ์นด๋“œ ์ค‘ A๋ฒˆ์งธ๋ถ€ํ„ฐ B๋ฒˆ์งธ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‡Œ๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ์Šน์ฒ ์ด๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์ž. ์ž…๋ ฅ ์ˆ˜์˜ ๊ฐœ์ˆ˜N, ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M, ๊ทธ ์ดํ›„ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๋Š” 100์ดํ•˜์˜ ์ž์—ฐ์ˆ˜. ๊ทธ ์ดํ›„ M๊ฐœ์˜ ์ค„์—๋Š” ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„ A, B๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ถœ๋ ฅ M..

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ•„์ˆ˜๊ฐœ๋… - map, unique()

์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ์ค‘๋ณต์—†๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•  ๋•Œ, map ์ด๋‚˜ unique ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค. 1. map #include #include #include using namespace std; map mp; int main() { vector v{ 1,1,2,2,3,3 }; for (int i : v) { if (mp[i]) continue; else mp[i] = 1; } vector ret; for (auto it : mp) { ret.push_back(it.first); } for (int i : ret) cout

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ•„์ˆ˜๊ฐœ๋… - ๋ฉ”๋ชจ๋ฆฌ์™€ ํฌ์ธํ„ฐ(pointer)

* ๋ฉ”๋ชจ๋ฆฌ ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์…€์˜ ์—ฐ์†๊ณผ ๊ฐ™๋‹ค. ๊ฐ ์…€์˜ ํฌ๊ธฐ๋Š” 1byte ์ด๊ณ  ๊ณ ์œ ์˜ ์ฃผ์†Œ๊ฐ€ ์žˆ๋‹ค. int i; ์œ„์™€ ๊ฐ™์ด int ํƒ€์ž…์„ ์„ ์–ธํ•˜๋ฉด 4Byte์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์—์•ฝํ•˜๊ฒŒ ๋œ๋‹ค. ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 128GB ๋ผ๊ณ  ํ•  ๋•Œ, 128GB ์ค‘ 4Byte์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์˜ˆ์•ฝํ•˜๋Š” ๊ฒƒ. cout

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๋ฌธ์ž์—ด ํ•„์ˆ˜๊ฐœ๋… - split(), substr(), erase()

* split(): ํŠน์ • ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ชผ๊ฐœ๋Š” ํ•จ์ˆ˜. C++ ์—์„  ์ง€์›ํ•˜์ง€ ์•Š์•„์„œ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ. * ์‹œ๊ฐ„๋ณต์žก๋„: O(n) * ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ชผ๊ฐœ๋Š” ์˜ˆ์‹œ ์ฝ”๋“œ. ์•”๊ธฐ โ˜…โ˜…โ˜…โ˜…โ˜… #include #include #include using namespace std; vector split(string input, string delimiter) { vector ret; long long pos = 0; string token = ""; while ((pos = input.find(delimiter)) != string::npos) { token = input.substr(0, pos); // "์•ˆ๋…•ํ•˜์„ธ์š”" ret.push_back(token); input.erase(0, pos + de..

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ•„์ˆ˜๊ฐœ๋… - ์ˆœ์—ด(Permutation), ์กฐํ•ฉ(Combination)

์ˆœ์„œ์™€ ์ƒ๊ด€ O ๋ฝ‘๋Š”๋‹ค๋ฉด >> ์ˆœ์—ด ์ˆœ์„œ์™€ ์ƒ๊ด€ X ๋ฝ‘๋Š”๋‹ค๋ฉด >> ์กฐํ•ฉ ์ˆœ์„œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜์—ฌ ... ~ํ•œ ์ˆœ์„œ์˜ ๊ฒฝ์šฐ max ๊ฐ’์„ ๊ตฌํ•˜์‹œ์˜ค ๋“ฑ๋“ฑ์˜ ๋ฌธ์ œ >> ์ˆœ์—ด ! * ์ˆœ์—ด ํ•จ์ˆ˜ next_permutation(์˜ค๋ฆ„์ฐจ์ˆœ) prev_permutation(๋‚ด๋ฆผ์ฐจ์ˆœ) * ์˜ˆ์‹œ ์ฝ”๋“œ #include using namespace std; int main() { int a[] = {1,2,3}; do{ for(int i : a) cout

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ•„์ˆ˜๊ฐœ๋… - ์žฌ๊ท€ํ•จ์ˆ˜(Recursion)

* ์žฌ๊ท€ํ•จ์ˆ˜ 1) ์ •์˜ ๋‹จ๊ณ„์—์„œ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ํ•จ์ˆ˜ 2) ์ „๋‹ฌ๋˜๋Š” ์ƒํƒœ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ๋ฟ ๋˜‘๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ํ•จ์ˆ˜ 3) ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐค ๋•Œ ์‚ฌ์šฉํ•จ * ์žฌ๊ท€ํ•จ์ˆ˜ ์ฃผ์˜์‚ฌํ•ญ 1) ๋ฐ˜๋“œ์‹œ ๊ธฐ์ €์‚ฌ๋ก€๋ฅผ ์จ์•ผ ํ•œ๋‹ค.(์ข…๋ฃŒ์กฐ๊ฑด) 2) ์‚ฌ์ดํด์ด ์žˆ๋‹ค๋ฉด ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค. 3) ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋  ๊ฒƒ ๊ฐ™์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ.(ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ๋Œ€ํ•œ cost๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด. ๋ฐ˜๋ณต๋ฌธ์ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Œ.) * ์˜ˆ์‹œ 1) ํŒฉํ† ๋ฆฌ์–ผ n! : ๊ทธ ์ด์ „์˜ ํ•ญ์„ ๋ชจ๋‘ ๊ณฑํ•˜๋Š” ๊ฒƒ. 2) ํ”ผ๋ณด๋‚˜์น˜: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ... #include using namespace std; int fact(int n){ if(n == 1 || n == 0) return 1; return n* fact(..

[Algorithm][C++] BFS/DFS

Queue์™€ ๋ฐฉ๋ฌธ๋…ธ๋“œ๋ฅผ ์ฒดํฌํ•  ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Queue๋Š” ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋จผ์ € ๋„ฃ์€ ๊ฐ’์„ ๋จผ์ € ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋„“๊ฒŒ ํƒ์ƒ‰ํ•ด์•ผํ•˜๋Š” BFS๋กœ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค) 1. queue์— 0๋ฒˆ ๋…ธ๋“œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. int visit [] 0 0 0 0 0 queue 0 2. ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด visit ๋ฐฐ์—ด์— ํ˜„์žฌ๋…ธ๋“œ๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. int visit [] 1 0 0 0 0 0 queue 0 3. queue์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์ธ 0๋ฒˆ๋…ธ๋“œ๋ฅผ ๋นผ์„œ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 0๋ฒˆ ๋…ธ๋“œ์˜ ์ด์›ƒ ๋…ธ๋“œ์ธ 1๋ฒˆ, 2๋ฒˆ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ ์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†์œผ๋ฉด queue์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ๋…ธ๋“œ๋กœ ..

728x90