![[Algorithm/MST] ํ๋ฆผ(Prim) ์๊ณ ๋ฆฌ์ฆ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLo4ic%2FbtsIKXlaWtA%2FFdjwanpr6QTTHvWi2ZyaPk%2Fimg.jpg)
ํ๋ฆผ(Prim) ์๊ณ ๋ฆฌ์ฆ1. ๊ทธ๋ํ์์ ์์์ ์ ์ ํ๋ค - (์ด๋ค ๋ ธ๋์ด์ด๋ ์๊ด์์)2. ์ ํํ ์ ์ ๊ณผ ์ธ์ ํ๋ ์ ์ ๋ค ์ค ์ต์ ๋น์ฉ์ธ ๊ฐ์ ์ ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ํํ๋ค.3. ๋ชจ๋ ์ ์ ์ด ์ ํ๋ ๋๊น์ง 1,2๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.โป ํ๋ฆผ์ ์์์ ์ ์ ํ๊ณ , ์์์ ์์ ๊ฐ๊น์ด ์ ์ ์ ์ ํํ๋ฉด์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์ฌ์ดํด์ ์ด๋ฃจ์ง ์์ง๋ง ํฌ๋ฃจ์ค์นผ์ ์์์ ์ ๋ฐ๋ก ์ ํ์ง ์๊ณ ์ ๋ ฌ ํ ๊ฐ์ฅ ์ต์ ๋น์ฉ์ผ๋ก ๊ฐ์ ์ ์ ํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด์ด ๋ฐ์ํ๋์ง ํ๋จํ๋ฉด์ ์งํํด์ผ ํ๋ค.
![[Algorithm/MST] ํฌ๋ฃจ์ค์นผ(Kruscal) ์๊ณ ๋ฆฌ์ฆ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSbpXF%2FbtsIJUCIAnR%2FUwLpo62mo69g9pwuxqnkOk%2Fimg.jpg)
ํฌ๋ฃจ์ค์นผ(Kruscal) ์๊ณ ๋ฆฌ์ฆ ์ต์ ๋น์ฉ ์ ์ฅํธ๋ฆฌ(Minimum Spanning Tree) ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก ๊ทธ๋ํ ๋ด์ ๋ชจ๋ ์ ์ ๋ค์ ๊ฐ์ฅ ์ ์ ๋น์ฉ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. [Algorithm] ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree) (tistory.com) [Algorithm] ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree)์ ์ฅํธ๋ฆฌ(SpanningTree) ๊ทธ๋ํ ์ค ๋ชจ๋ ์ ์ ์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ , ๊ฐ์ ๋ค ์ฌ์ด์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ฅผ ์๋ฏธํ๋ค. ํน์ง์ผ๋ก๋ N๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ ๊ทธ๋ํ์ ์ต์ ๊ฐ์ (edge)์ ์๋ (N-1)๊ฐcclient.tistory.com์ด์ ์ ํฌ์คํ ํ ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ์ ๋ค์ฏ๊น์ง ํน์ง..
![[Algorithm] ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGbg5E%2FbtsILlMQORA%2FPlZZwKQRWSLFuiPXNIRmG1%2Fimg.jpg)
์ ์ฅํธ๋ฆฌ(SpanningTree)๊ทธ๋ํ ์ค ๋ชจ๋ ์ ์ ์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ , ๊ฐ์ ๋ค ์ฌ์ด์ ์ฌ์ดํด์ด ์๋ ๊ทธ๋ํ๋ฅผ ์๋ฏธํ๋ค. ํน์ง์ผ๋ก๋ N๊ฐ์ ์ ์ ์ ๊ฐ์ง๋ ๊ทธ๋ํ์ ์ต์ ๊ฐ์ (edge)์ ์๋ (N-1)๊ฐ์ด๋ค. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ (MST, Minimum SpanningTree)์ ์ฅ ํธ๋ฆฌ๋ ๊ทธ๋ํ์์ ๋ชจ๋ ์ ์ ์ ๋ํ ์ต์ํ์ ์ฐ๊ฒฐ๋ง์ ๋จ๊ธด ๊ทธ๋ํ์ด๋ค. ํ ๊ณณ์ผ๋ก ๋๋ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๊ฐ ์ด์ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ์ฆ ์ฌ์ดํด์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์ต์ํ์ ์ฐ๊ฒฐ์ด๋ผ ๋งํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ์์น ํ๋์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ๋ ๋จ ํ ๊ฐ์ง๋ก ๊ฒฐ์ ๋๋๋ก ํญ์ ํธ๋ฆฌ์ ํํ๋ฅผ ๋ํ๋ธ๋ค. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ๋ ์ด๋ฌํ ์ ์ฅ ํธ๋ฆฌ๋ค ์ค ๊ฐ์ ์ ๊ฐ์ค์น ํฉ์ด ๊ฐ์ฅ ์์ ํธ๋ฆฌ์ด๋ค. ์ต์ ๋น์ฉ ์ ์ฅ ํธ๋ฆฌ๋ ๊ทธ๋ฆฌ๋ ..
![[Algorithm] Union-Find](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAtxtB%2FbtsIJYFdKkM%2FWf8iqM2n7Hizc1K9TOXLC1%2Fimg.jpg)
Union-Find(์ ๋์จ ํ์ธ๋)๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก ์๋ก์(disjoint sets) ์งํฉ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์๋ก์ ์งํฉ์ด๋ ๊ณตํต ์์๊ฐ ์๋ ๋ ์งํฉ์ ์๋ฏธํ๋ค. ์๋ก์ ์งํฉ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ๋๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์งํฉ์ ํํํ๋๋ฐ, ์๋ก์ ์งํฉ ์ ๋ณด(ํฉ์งํฉ ์ฐ์ฐ)๊ฐ ์ฃผ์ด์ก์ ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์ ์งํฉ์ ํํํ๋ ์๋ก์ ์งํฉ ๊ณ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.1. union(ํฉ์งํฉ)์ฐ์ฐ์ ํ์ธํ์ฌ, ์๋ก ์ฐ๊ฒฐ๋ ๋ ๋ ธ๋ A, B๋ฅผ ํ์ธํ๋ค. - A์ B์ ๋ฃจํธ ๋ ธํธ A', B'๋ฅผ ๊ฐ๊ฐ ์ฐพ๋๋ค. - A'๋ฅผ B'์ ๋ถ๋ชจ ๋ ธ๋๋ก ์ค์ ํ๋ค.(B'๊ฐ A'๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค.)2. ๋ชจ๋ union(ํฉ์งํฉ) ์ฐ์ฐ์ ์ฒ๋ฆฌํ ๋๊น์ง 1๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.17. Union-Find(..
![[C++] std::string_view ํด๋์ค](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZHxe9%2FbtsBUBoMzdj%2FZOBjyFwMRpY7XrjEphm7iK%2Fimg.png)
C++17์ด์ ์๋ ์ฝ๊ธฐ ์ ์ฉ ์คํธ๋ง์ ๋ฐ๋ ํจ์์ ๋งค๊ฐ๋ณ์ ํ์ ์ ์ฝ๊ฒ ๊ฒฐ์ ํ ์ ์์๋ค. const char*๋ก ์ง์ ํ๋ฉด std::string์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์์ c_str( )๋ data( )๋ฅผ ์ด์ฉํ์ฌ string์ const char*๋ก ๋ณํํด์ ํธ์ถํด์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด std::string์ ๊ฐ์ฒด์งํฅ ์์ฑ๊ณผ ์ฌ๊ธฐ์ ์ ๊ณตํ๋ ํฌํผ ๋ฉ์๋๋ฅผ ์ ๋๋ก ํ์ฉํ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ C++17๋ถํฐ ์ถ๊ฐ๋ std::string_view๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. std::string_view - ํค๋: - ํด๋์ค ํ ํ๋ฆฟ: std::base_string_view - ์ถ๊ฐ ๋ฉ์๋: remove_prefix(size_t), remove_suffix(size_t) → ์ง์ ํ ์คํ์ ๋งํผ ์คํธ๋ง์..
![[C++] ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ ํ๋กํ ํ์
& ํ๊ณ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdfu4zG%2FbtsBUKMMLpW%2FmkyB95nsJrB09ltb3SmwrK%2Fimg.png)
์ข ๋ฅ ์ฐ์ฐ์ ํ๋กํ ํ์ ์ดํญ ์ฐ์ ์ฐ์ฐ์ operator+ operator- operator* operator/ operator% T operatorโ ( const T&, const T& ) ; ๋จํญ ์ฐ์ ๋ฐ ๋นํธ ์ฐ์ฐ์ operator+ operator- operator~ T operatorโ ( ) const ; ์ ํ, ํํ (์ฆ๊ฐ,๊ฐ์) operator++ operator-- T& operatorโ ( ); T& operatorโ ( int ); ๋์ ์ฐ์ฐ์ operator = T& operatorโ ( const T& ); ์ถ์ฝ ์ฐ์ ๋์ ์ฐ์ฐ์ operator+= operator-= operator*= operator/= operator%= T& operatorโ ( const T& ); T&..
![(์ ๋ฌธ๊ฐ๋ฅผ ์ํ C++/ ๊ฐ์ 4ํ) - I/O ์
์ถ๋ ฅ ์์ ๋ถ์](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FezVBCY%2FbtsBT4rcPkM%2FkUKng21RJB9Y2kY9uNIF2k%2Fimg.png)
C++์์๋ ํํ ์คํธ๋ฆผ์ ์ถ๋ฐ์ง์ ๋ชฉ์ ์ง๋ก ์ฝ์, ํ์ผ, ์คํธ๋ง์ ์ฌ์ฉํฉ๋๋ค. โป ํ์ผ ๋์ ๋ํ๋ด๋ EOF(end of file)์ ์ ๋์ค์ ๋ฆฌ๋ ์ค์์๋ Ctrl+D๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ฐ์์๋ Ctrl+Z๋ฅผ ์ฌ์ฉํฉ๋๋ค. 1. ์ถ๋ ฅ ์คํธ๋ฆผ์์ ์ ๊ณตํ๋ ๋ฉ์๋ ๋ํ์ ์ธ cout์ ๋นผ๊ณ ์ ๋ฆฌํ์ต๋๋ค. cin ์ ๋ ฅ ์คํธ๋ฆผ. '์ ๋ ฅ ์ฝ์'์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค. cout ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์ถ๋ ฅ ์คํธ๋ฆผ. ๋ฐ์ดํฐ๋ฅผ '์ถ๋ ฅ ์ฝ์'์ ์ด๋ค. cerr ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ถ๋ ฅ ์คํธ๋ฆผ. ๋ฐ์ดํธ๋ฅผ '์๋ฌ ์ฝ์'์ ์จ๋ค. clog ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ cerr โป ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ฐจ์ด์ ์ฅ์ ์? ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ ์คํธ๋ฆผ์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ์ ์ ์ฅํ๋ค๊ฐ ๋ธ๋ก ๋จ์๋ก ๋ชฉ์ ์ง๋ก ๋ณด๋ด๊ณ , ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ง ์๋ ..
![[C++] ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1IbCm%2FbtsBJhrScsi%2FcdjWbeHK6YHc9dfB00KPJ0%2Fimg.png)
ใ์ถ์ฒ. ์์ํ์! C++17 ํ๋ก๊ทธ๋๋ฐ (๋ฐํ์ฌ ์ง์)ใ ์์ํ๊ธฐ ์ ๋๊ธฐ์ ๋น๋๊ธฐ์ ๋ํด์ ๋จผ์ ์์๋ณด์! Asynchronous(๋น๋๊ธฐ) Synchronous(๋๊ธฐ) ๋ฐ์๋ ์ด๋ ค์ ๋ณด์ด๋ ๋๊ธฐ, ๋น๋๊ธฐ ์ผ๋จ ๋ง์ ํ ์ ์์ด์ผ ํ๋.. ๋ฒ์ญ๊ธฐ์ ๋๋ ค ์ฝ์ด์ฃผ๋๋ฐ๋ก ํ ๋ฒ ์ ์ด๋ณด๊ฒ ์ต๋๋ค. Synchronous-> siNGkrษnษs(์จ-์ธ!ํฌ๋ก๋์ค) Asynchronous->ฤหsiNGkrษnษs(์์ด ์จ-์ธ!ํฌ๋ก๋์ค) ์ด๋ฐ์์ผ๋ก ๋ฐ์ํด์ฃผ๊ณ ์์ต๋๋ค. ์์ ๋ก์๋ค.. ๋ฉด์ ์์ ๋ฌผ์ด๋ณด๋ฉด ์์๋ฃ๊ธด ํด์ผํ๋๊น (T_T)/ ์ด์ ์ด ๋์ ์ฐจ์ด์ ๊ณผ ์ง๋ ๋ป์ ์์๋ณด์! ๋๋ณด๊ธฐ ๋๋ณด๊ธฐ ๋๋ณด๊ธฐ โ Asynchronous(๋น๋๊ธฐ) : ์์ ์ ์์ํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์ ์ฝ๊ฒ ์ด์ผ๊ธฐ ํ๋ฉด, ๊ผญ ํ ์ค ํ ์ค ์์๋๋ก ์คํ๋..
![(c++) ์กฐ๊ฑด ๋ณ์(Conditional Variable)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUssFn%2FbtsBT0WDQTl%2FtWCEVmBVpwigBkG3fwBThK%2Fimg.png)
ใ์ถ์ฒ. ์์ํ์! C++17 ํ๋ก๊ทธ๋๋ฐ (๋ฐํ์ฌ ์ง์)ใ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ ์ค๋ ๋๋ผ ํ๋๋ผ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ค๋ ๋์ ์ ๋ฌํ ์ ๋ณด๊ฐ ์๊ธฐ ๋ง๋ จ์ด๋ค. ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ์ค ์ฐ๋ฆฌ๊ฐ ๊ณต๋ถํ ๋ฐฉ๋ฒ์ '์กฐ๊ฑด๋ณ์(Conditional Variable)' ๋ผ๊ณ ๋ถ๋ฅด๋ ๊ธฐ๋ฅ์ด๋ค. ์กฐ๊ฑด๋ณ์๋ ์ฃผ๋ก ๊ฒ์์์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐ ๋ฌ๋ฆฌ๊ธฐ ์ํฉ์ฒ๋ผ ๋ชจ๋ ์ ์๊ฐ ์ถ๋ฐ์ ์์ ๋๊ธฐํ ์ํ์์ ์ด์๋ฆฌ์ ํจ๊ป ์ถ๋ฐํ๋๋ก ์ค๋ ๋ ๋ชจ๋ ๋๊ธฐ ์ํ๋ก ๋ง๋ค๊ณ ๋์์ ๊ณต๋ ๊ฒฝ์์ ์ํํ๋ค. ์กฐ๊ฑด๋ณ์๋ ๋จ์ง ๋ณ์๋ฅผ ํตํด ์ ํธ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ๋ฅ๋ง์ ์ ๊ณตํ ๋ฟ ์์ฒด ์ ๊ธ ๊ธฐ๋ฅ์ด ์๋ค. ๋ฐ๋ผ์ ๋ค์์ ์ค๋ ๋์ ์ํด ์คํ๋๋ ์์ ์ด ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ณ๋ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์ฅ ์ค์ํ ํจ์๋ wait(), notify_all() ํจ์์ด๋ค. ์กฐ๊ฑด๋ณ..