ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•
์‚ผ์„ฑ์ „์ž DS, DX ๋ถ€๋ฌธ ์ƒ๊ด€์—†์ด SW์ง๊ตฐ์œผ๋กœ ์ž…์‚ฌํ•˜๊ฒŒ ๋˜๋ฉด, SW Certi. Pro๋ฅผ ์ทจ๋“ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๋ถ€๋ฌธ์ด๋‚˜ ํŒ€์— ๋”ฐ๋ผ ์ทจ๋“์„ ๋งŽ์ด ๊ถŒ์žฅํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์–ด ๋ถ€๋ฐ”๋ถ€๋กœ ๋‚˜๋‰˜๊ธด ํ•œ๋‹ค. ํฐ ๊ณต๋ถ€๋ฅผ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, 12์›”์— ์šด์ด ์ข‹๊ฒŒ ์ž˜ ํ’€ ์ˆ˜ ์žˆ๋Š” ์œ ํ˜•์ด ๋‚˜์™”์œผ๋‚˜ ์ฝ”๋“œ ํ•œ ์ค„์„ ์ž˜ ๋ชป ์ž‘์„ฑํ•ด์„œ ํƒˆ๋ฝ ํ›„ ์ด๋ฆฌ์ €๋ฆฌ ์ˆ˜๋‚œ์„ ๊ฒช๊ณ  ๊ณต๋ถ€ํ–ˆ๋˜ ๊ณผ์ •์„ ๊ธฐ๋กํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

SW certi. Pro?

 ์‚ผ์„ฑ์˜ ์ž…์‚ฌ ์‹œํ—˜ ๋‚œ์ด๋„๋Š” AD(Advanced)์ด๊ณ , ์ž…์‚ฌ ํ›„ ์ทจ๋“์ด ํ•„์š”ํ•œ ๋‚œ์ด๋„๋Š” Pro(Professional)์ด๋‹ค. ์—ฌ๋Ÿฌ ํ›„๊ธฐ๋“ค์„ ์ฐพ์•„๋ณด๋ฉด AD๋ณด๋‹ค ์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค ์ด์ง€๋งŒ, ๊ณต๋ถ€ํ•ด๋ณด๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋‹ฌ๋ฆฌ `์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ๊ณผ ์ตœ์ ํ™” ๋ฌธ์ œ๋ผ์„œ ๊ฒฐ์ด ๋‹ฌ๋ผ์งˆ ๋ฟ์ด๋‹ค.` ๋ผ๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ฒŒ ๋œ๋‹ค. (๊ทธ๋ž˜๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•œ ์งฌ๋ฐ”?๊ฐ€ ์žˆ์œผ๋ฉด ๋น ๋ฅด๊ฒŒ ์‹œํ—˜์„ ํŒจ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‚˜๋Š” ์งฌ๋ฐ”๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค๐Ÿ˜‚) ๊ณผ๊ฑฐ์™€ ๋‹ฌ๋ฆฌ ์›” ์‘์‹œ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์•„์ ธ ์‹ค๋ฌด๊ฐ€ ๋น„๊ต์  ์ ์€ ์ €์—ฐ์ฐจ ๋•Œ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์‘์‹œํ•˜์—ฌ ์ทจ๋“ํ•˜๋Š” ๊ฒƒ์ด ๋ฒ ์ŠคํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

๋„˜์–ด์•ผ ํ•˜๋Š” ๋‚œ๊ด€๋“ค!

Python vs C/C++

 ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ Python์œผ๋กœ ์ค€๋น„ํ–ˆ๊ณ  C/C++ ๊ธฐ๋ฐ˜์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋Š” ๋‚œ๊ด€์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ดˆ๊ธฐ์— ์น˜๋ €๋˜ ์‹œํ—˜์—๋Š” `Python์€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋  ํ…๋ฐ... C/C++์—์„œ๋Š” ๋ญ ์จ์•ผ ๋˜์ง€..?`๋ผ๋Š” ์ƒ๊ฐ๊ณผ ํ•จ๊ป˜ ๊ตฌํ˜„์„ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œํ—˜์— ์—ฌ๋Ÿฌ ๋ฒˆ ํƒˆ๋ฝํ•˜๊ณ  C/C++์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ STL๋“ค๊ณผ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ์ œ์ถœํ•œ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ ๋งŽ์ด ๋ฐฐ์šฐ๊ณ  ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋ฌธ์ œ ์ดํ•ด๋„ ๋ถ€์กฑ!

 ์‹œํ—˜์„ ๋ณด๋ฉฐ, ํ•™์Šต์ด ๋˜๊ธฐ ์ „์—๋Š” ๋ฌธ์ œ๋ฅผ ์ฝ์–ด๋„ ์–ด๋–ค์‹์œผ๋กœ ์ตœ์ ํ™”ํ•ด์•ผ ๋˜๋Š”์ง€ ๋„๋ฌด์ง€ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ O(N), O(logN) ๋“ฑ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ์„ ํ†ตํ•ด ์–ด๋–ค ์‹์œผ๋กœ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ๋ฌธ์ œ ๋ณ„๋กœ ๊ณ„์† ๊ณ ๋ฏผํ•˜์˜€๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์‹œํ—˜์„ ์น˜๋ฉด ์น  ์ˆ˜๋ก ์–ด๋–ค ์œ ํ˜•์ธ์ง€, ๊ตฌํ˜„๋Ÿ‰์ด ๋งŽ์€ ๋ฌธ์ œ์ธ์ง€ ์–ด๋–ค ์ž๋ฃŒ๊ฐ€ ํ•„์š”ํ•œ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์•Œ์•„๋‘๋ฉด ์ข‹์€ ๊ฒƒ๋“ค

 ๋ฐ์ดํ„ฐ์˜ ๊ฐฑ์‹ ์ด ํ•„์š”ํ•œ PQ๋ผ๋ฉด, Priority Queue ๊ตฌํ˜„ํ•˜๊ธฐ ๊ธ€์„ ์ฐธ์กฐํ•˜์—ฌ ์ง์ ‘ C๋กœ ์†์ฝ”๋”ฉ์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด์™ธ์—๋Š” `<set>`, `<map>`๋“ฑ์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋ฉด ์ข‹๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ BFS, DFS๋ฅผ ํ†ตํ•ด ๊ฒฝ๋กœ ํƒ์ƒ‰์„ ํ•˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์—ญ๋Ÿ‰๋„ ํ•„์š”ํ•˜๋‹ค.

 ๋˜ํ•œ ๋ฌธ์ œ์— ๋”ฐ๋ผ ๊ตฌํ˜„๋Ÿ‰์ด ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ์•„์ด๋””์–ด๋งŒ ์ƒ๊ฐ๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ƒ๊ฐ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ๊ธธ์ง€ ์•Š์€ ๋ฌธ์ œ๋“ค์ด ์žˆ๋‹ค. ๋‚˜๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋“ค ์ค‘ ํ›„์ž๊ฐ€ ๋‚˜์—๊ฒŒ ๋ณด๋‹ค ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜ค๋ฉด ๋งž์ถ”๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ์ด์–ด๋‚˜๊ฐ”๋‹ค.

 

STL ๊ฟ€ํŒ๋“ค

for

#include <list>

using namespace std;

int arr[5] = { 3, 4, 5, 6, 7 };

int main() {
    for (auto& value : arr)
        value++;
}
  • `auto value : arr`๋กœ ํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฐ์ฒด ํฌ๊ธฐ๋งŒํผ ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๊ธฐ๋ณธ ํƒ€์ž…๋ฟ ์•„๋‹ˆ๋ผ `Container`๋“ค๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

 

memset

#include <cstring>

#define MAX_ARR    10000

int arr[MAX_ARR];

int main() {
    memset(arr, 0, sizeof(int) * MAX_ARR);
}
  • init๋„ ์‹œ๊ฐ„์ด ๋“œ๋Š” ์ž‘์—…์ด๋‹ค. STL์˜ Container๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด memset์„ ํ™œ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 

set, map

#include <set>
#include <string>
#include <iostream>

using namespace std;

set<string> words;

int main() {
    char curWord[][5] = { "ABAA", "BBCC", "EFEE", "KFFF", "GSAA" };

    for (auto& w : curWord)
        words.insert(w);

    cout << "์‚ฌ์ „ ์ˆœ ์ •๋ ฌ" << endl;
    cout << *words.begin() << endl;

    auto iter = words.find("BBCC");
    words.erase(iter);
    
    cout << "BBCC ์‚ญ์ œ ํ™•์ธ" << endl;
    for (auto& w : words)
        cout << w << endl;
}

 set, map์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์€ ์œ ์‚ฌํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•˜๋ฉด ์œ„์™€ ๊ฐ™๋‹ค. `erase`์˜ return ๊ฐ’์€ erase ๋˜๋Š” ๊ฐ’์˜ next์ด๋‹ค.

 

unordered_map

#include <iostream>
#include <unordered_map>

using namespace std;

unordered_map<string, int> wordCntMap;

int main() {
    wordCntMap.clear(); // ์ดˆ๊ธฐํ™”
    
    wordCntMap["BLUE"] = 100;
    
    if (wordCntMap.count("BLUE")) // key ๊ฐ’ ํ™•์ธ
    	cout << "๊ฐ’ ์กด์žฌํ•จ" << endl;
    
    
    wordCntMap["BLUE"] = 50; // ๊ฐ’ ๊ฐฑ์‹ 
    wordCntMap.erase("BLUE"); // ๊ฐ’ ์‚ญ์ œ
}
  • unordered_map์„ ํ†ตํ•ด key, value ๊ฐ’์„ ์œ ์ง€, ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ์ด์™ธ์—๋„ ์‚ฌ๋‚ด ์‚ฌ์ดํŠธ์˜ ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด๋ฉด, ๋‹ค์–‘ํ•œ ๊ฟ€ํŒ๋“ค์ด ํ˜๋Ÿฌ๋„˜์นœ๋‹ค. (`register`, `emplace` ๋“ฑ๋“ฑ...)

 

๊ธ€์„ ๋งˆ์น˜๋ฉฐ

 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข‹์•„ํ•˜์ง€ ์•Š์•˜๊ณ , ์ž…์‚ฌ๋ฅผ ์œ„ํ•ด ์ฃผ๋จน๊ตฌ๊ตฌ์‹์œผ๋กœ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ํ•ด๋‹น ์‹œํ—˜์„ ์ค€๋น„ํ•˜๋ฉฐ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋‹ค. ํ•ฉ๊ฒฉํ•˜๊ณ  ๋ณด๋‹ˆ ํ—ˆ๋ฌดํ•˜๊ธฐ๋„ ํ•˜๊ณ , ํ•ด๋‹น ๊ณผ์ •์—์„œ ๋งŽ์ด ๋ฐฐ์šฐ๊ณ  C++์„ ํ™œ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ๋„ ์ƒ์Šน๋œ ๊ฒƒ ๊ฐ™๋‹ค. ํ•œ๋‹ฌ์— 2๋ฒˆ์€ ํ† ์š”์ผ๋งˆ๋‹ค ์‹œํ—˜์„ ์น˜๋‹ค๋ณด๋‹ˆ ์ฃผ๋ง์ด ์ˆœ์‚ญ๋˜๊ณ , ์‹œํ—˜์ด ์—†๋Š” ์ฃผ๋ง์€ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ์˜จ์ „ํžˆ ์ฃผ๋ง์„ ๋ชป ์ฆ๊ธด ๊ฒŒ ์–ด๋Š๋ง ๋ฐ˜๋…„์ด ์ง€๋‚˜๋ฒ„๋ ธ๋‹ค. ๋‹น์žฅ ๋ˆˆ์— ๋ณด์ด๋Š” Pro ์‹œํ—˜์„ ํ•ด์น˜์›Œ๋ฒ„๋ ธ์œผ๋‹ˆ ์ด์ œ๋Š” ์‹ค๋ฌด์— ์ง‘์ค‘ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค...๐Ÿ˜Š

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€