<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>GAME DEV BLOG</title>
    <link>https://sagacityjang.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 13 May 2026 01:24:17 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SagacityJang</managingEditor>
    <image>
      <title>GAME DEV BLOG</title>
      <url>https://tistory1.daumcdn.net/tistory/3182658/attach/d262641ed5c5432da8a4ee9e0fb5422c</url>
      <link>https://sagacityjang.tistory.com</link>
    </image>
    <item>
      <title>Left 4 Dead 2 상처 렌더링</title>
      <link>https://sagacityjang.tistory.com/143</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://steamcdn-a.akamaihd.net/apps/valve/2010/gdc2010_vlachos_l4d2wounds.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://steamcdn-a.akamaihd.net/apps/valve/2010/gdc2010_vlachos_l4d2wounds.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 이야기</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/143</guid>
      <comments>https://sagacityjang.tistory.com/143#entry143comment</comments>
      <pubDate>Tue, 16 Nov 2021 21:54:38 +0900</pubDate>
    </item>
    <item>
      <title>C++ 폴더 안 파일 이름 가져오기 (x32,x64, 멀티바이트, 유니코드 지원)</title>
      <link>https://sagacityjang.tistory.com/136</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;돌아다니는 코드 개량해서 올림&lt;/p&gt;
&lt;pre id=&quot;code_1629208678141&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;io.h&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;tchar.h&amp;gt;
#include &amp;lt;string&amp;gt;
using namespace std;
using std::string;
using std::wstring;
#ifdef UNICODE
typedef wstring tstring;
#else
typedef string tstring;
#endif

// Check windows
#if _WIN32 || _WIN64
#if _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

// Check GCC
#if __GNUC__
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

#if defined(UNICODE) || defined(_UNICODE)
#define tcout std::wcout
#else
#define tcout std::cout
#endif

#ifdef ENVIRONMENT32
#define T_FIND_DATA _tfinddata_t
#define T_FIND_FIRST _tfindfirst
#define T_FIND_NEXT _tfindnext
#endif
#ifdef ENVIRONMENT64
#define T_FIND_DATA _tfinddata64_t
#define T_FIND_FIRST _tfindfirst64
#define T_FIND_NEXT _tfindnext64
#endif

vector&amp;lt;tstring&amp;gt; GetFilesInDirectory(const tstring&amp;amp; _absolutePath, const tstring&amp;amp; _filter)
{
	tstring searching = _absolutePath + _filter;
	vector&amp;lt;tstring&amp;gt; return_;

	T_FIND_DATA fd;
	const auto handle = T_FIND_FIRST(searching.c_str(), &amp;amp;fd);  //현재 폴더 내 모든 파일을 찾는다.

	if (handle == -1)
		return return_;

	auto result = 0;
	do
	{
		if (fd.attrib &amp;amp; _A_SUBDIR) { // 디렉토리면
			tstring dirName = fd.name;
			if (_T(&quot;.&quot;) != dirName &amp;amp;&amp;amp; _T(&quot;..&quot;) != dirName) {
				tstring subPath = _absolutePath + dirName + _T(&quot;\\&quot;);
				vector&amp;lt;tstring&amp;gt; vec = GetFilesInDirectory(subPath, _filter);
				for (int i = 0; i &amp;lt; vec.size(); ++i)
					return_.push_back(vec[i]);
			}
		}
		else { // 파일이면
			tstring fileName = fd.name;
			return_.push_back(fileName);
		}

		result = T_FIND_NEXT(handle, &amp;amp;fd);
	} while (result != -1);

	_findclose(handle);

	return return_;
}

int main() {
	// 절대경로
	tstring path = _T(&quot;N:\\Project\\DirectX2019Game\\DirectX11Game\\OutputFile\\bin\\content\\texture\\&quot;);

	// 필터
	tstring filter = _T(&quot;*.*&quot;);

	vector&amp;lt;tstring&amp;gt; veclist = GetFilesInDirectory(path, filter);
	for (int i = 0; i &amp;lt; veclist.size(); ++i) {

		tcout &amp;lt;&amp;lt; veclist[i].c_str() &amp;lt;&amp;lt; _T(&quot;\n&quot;);
	}
	
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어/C++</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/136</guid>
      <comments>https://sagacityjang.tistory.com/136#entry136comment</comments>
      <pubDate>Tue, 17 Aug 2021 22:58:48 +0900</pubDate>
    </item>
    <item>
      <title>C++ 캐스팅을 이용한 구조체와 배열 호환</title>
      <link>https://sagacityjang.tistory.com/135</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구조체의 메모리 크기(12byte)가 배열의 크기(12byte)와 같다면 float*타입으로 캐스팅하여 구조체 변수의 주소값을 넘겨주기만 하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;543&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo81kG/btra1ZLhF3K/QkFT13L2K35iNzKtbV2ytk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo81kG/btra1ZLhF3K/QkFT13L2K35iNzKtbV2ytk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo81kG/btra1ZLhF3K/QkFT13L2K35iNzKtbV2ytk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo81kG%2Fbtra1ZLhF3K%2FQkFT13L2K35iNzKtbV2ytk%2Fimg.png&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;543&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;64&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n8382/btrbbT32Ytg/SPFFuXOS4goxYvLjlqAMM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n8382/btrbbT32Ytg/SPFFuXOS4goxYvLjlqAMM0/img.png&quot; data-alt=&quot;출력 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n8382/btrbbT32Ytg/SPFFuXOS4goxYvLjlqAMM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn8382%2FbtrbbT32Ytg%2FSPFFuXOS4goxYvLjlqAMM0%2Fimg.png&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;64&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어/C++</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/135</guid>
      <comments>https://sagacityjang.tistory.com/135#entry135comment</comments>
      <pubDate>Tue, 3 Aug 2021 16:41:02 +0900</pubDate>
    </item>
    <item>
      <title>Visual studio 2019에서 빌드를 더 빠르게 하기</title>
      <link>https://sagacityjang.tistory.com/134</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DirectX11를 이용하여 게임 엔진을 만들면서 프로젝트가 커질수록 빌드속도가 느려진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드속도를 더 빠르게 높여주도록 개선해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2019버전에서 Unity 빌드를 제공해준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity 빌드를 사용하면 더 빠르게 빌드 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설정하는 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity(JUMBO) 빌드 사용을 &quot;예&quot;로 설정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;538&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eNXJE9/btq8jc7tz8C/BKnCSxotpt9KWRKRfBrai1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eNXJE9/btq8jc7tz8C/BKnCSxotpt9KWRKRfBrai1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eNXJE9/btq8jc7tz8C/BKnCSxotpt9KWRKRfBrai1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeNXJE9%2Fbtq8jc7tz8C%2FBKnCSxotpt9KWRKRfBrai1%2Fimg.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;538&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예로 설정하게되면 C/C++에서 Unity 빌드가 나타나게 되는데 아래 사진과 같이 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unity 파일의 최대 소스 수를 0으로 설정하면 알아서 파일 개수가 설정 됨.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;538&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E9FDv/btq9R4y8WuO/TGxq51JvEWG1M3Kf1grJQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E9FDv/btq9R4y8WuO/TGxq51JvEWG1M3Kf1grJQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E9FDv/btq9R4y8WuO/TGxq51JvEWG1M3Kf1grJQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE9FDv%2Fbtq9R4y8WuO%2FTGxq51JvEWG1M3Kf1grJQ0%2Fimg.png&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;538&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 컴파일된 헤더를 사용으로 설정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdEbqV/btq9Vk9kDVf/Wb0fFFZ4BEQSF3k5XQnsQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdEbqV/btq9Vk9kDVf/Wb0fFFZ4BEQSF3k5XQnsQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdEbqV/btq9Vk9kDVf/Wb0fFFZ4BEQSF3k5XQnsQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdEbqV%2Fbtq9Vk9kDVf%2FWb0fFFZ4BEQSF3k5XQnsQ0%2Fimg.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 프로세서 컴파일을 &quot;예&quot;로 설정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;537&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0gd16/btq8ppRM6XU/wDBgjydGGUCcXaT9PFv3KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0gd16/btq8ppRM6XU/wDBgjydGGUCcXaT9PFv3KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0gd16/btq8ppRM6XU/wDBgjydGGUCcXaT9PFv3KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0gd16%2Fbtq8ppRM6XU%2FwDBgjydGGUCcXaT9PFv3KK%2Fimg.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;537&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드하게되면 아래와 같은 파일이 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;177&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ1Gbg/btq9PUDMmiK/hrdt97axI9Sbo4JCf3wHyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ1Gbg/btq9PUDMmiK/hrdt97axI9Sbo4JCf3wHyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ1Gbg/btq9PUDMmiK/hrdt97axI9Sbo4JCf3wHyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ1Gbg%2Fbtq9PUDMmiK%2Fhrdt97axI9Sbo4JCf3wHyK%2Fimg.png&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;177&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Tip : 한글로 된 경로가 있을 경우 에러가 나서 제대로 작동 안함.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 이야기</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/134</guid>
      <comments>https://sagacityjang.tistory.com/134#entry134comment</comments>
      <pubDate>Tue, 29 Jun 2021 12:44:59 +0900</pubDate>
    </item>
    <item>
      <title>A* (A star) 알고리즘 구현 c++ 콘솔.</title>
      <link>https://sagacityjang.tistory.com/133</link>
      <description>&lt;p&gt;Astar 알고리즘 시뮬레이션&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/en0QjTzjSd8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;youtu.be/en0QjTzjSd8&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=en0QjTzjSd8&amp;amp;feature=youtu.be&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Kjwgc/hyJNVliOPY/hQMAX7efi3BR9i6aDpuOz1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/en0QjTzjSd8&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;소스 코드&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gkagm2/cpppractise/blob/master/cpptraining/ch1/Algorithm/AStar/AStar.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github.com/gkagm2/cpppractise/blob/master/cpptraining/ch1/Algorithm/AStar/AStar.cpp&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617629943753&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;gkagm2/cpppractise&quot; data-og-description=&quot;:orange_book:C++ 연습용, 연구용, 토이 프로그램들을 담은 프로젝트:orange_book: - gkagm2/cpppractise&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/gkagm2/cpppractise/blob/master/cpptraining/ch1/Algorithm/AStar/AStar.cpp&quot; data-og-url=&quot;https://github.com/gkagm2/cpppractise&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s4Gq1/hyJN1shS0x/FUhVY8W8fit2dt9mV9Bk8k/img.png?width=368&amp;amp;height=368&amp;amp;face=122_109_271_272&quot;&gt;&lt;a href=&quot;https://github.com/gkagm2/cpppractise/blob/master/cpptraining/ch1/Algorithm/AStar/AStar.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/gkagm2/cpppractise/blob/master/cpptraining/ch1/Algorithm/AStar/AStar.cpp&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s4Gq1/hyJN1shS0x/FUhVY8W8fit2dt9mV9Bk8k/img.png?width=368&amp;amp;height=368&amp;amp;face=122_109_271_272');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;gkagm2/cpppractise&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;:orange_book:C++ 연습용, 연구용, 토이 프로그램들을 담은 프로젝트:orange_book: - gkagm2/cpppractise&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>게임 개발/WinApi</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/133</guid>
      <comments>https://sagacityjang.tistory.com/133#entry133comment</comments>
      <pubDate>Mon, 5 Apr 2021 22:39:03 +0900</pubDate>
    </item>
    <item>
      <title>C++  디폴트 할당자와 비교자가 사용될 때 컨테이너에 저장되는 항목이 가져야 할 상세 요건</title>
      <link>https://sagacityjang.tistory.com/131</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;메서드&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;참고&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;복제 생성자&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;원본과 같은 복제 항목을 만든다. 원본에 아무런 영향 없이 복제 항목이 소멸도리 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;항목을 삽일할 때마다 매번 호출된다. 단, 즉성(emplace) 메서드는 예외다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;이동 생성자&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;원본 항목의 내용물을 이동시킴으로써 새로운 항목을 만든다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;새로운 항목을 생성한 후 원본 항목(우측값)이 소멸할 때 이용된다. 또한 예를 들어 vector의 크기가 커질 때 이용된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;대입 연산자&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;원본 항목의 복제를 통해 기존 항목의 내용물을 대체한다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;항목을 수정할 때마다 사용된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;이동 대입 연산자&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;원본 항목의 내용물을 다른 항목으로 이동 시킨다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;대입 연산 후 원본 항목(우측값)이 소멸할 때 이용된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;소멸자&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;항목을 삭제한다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;컨테이너에서 항목을 제거할 때마다 호출된다. 예를 들어 vector의 크기가 커지고 항목이 이동 시맨틱을 지원하지 않을 때 호출된다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;디폴트 생성자&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;아무런 인자 없이 항목을 생성한다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;인자 하나짜리 vector::resize() 메서도를 호출하거나 map의 operator[]를 이용할 때와 같이 특별한 경우에만 필요하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;operator==&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;두 항목이 같은지 비교한다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;비순차 컨테이너에 저장된 키 간에 operator==과 같은 특별한 연산이 수행될 때만 필요하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5426%;&quot;&gt;operator&amp;lt;&lt;/td&gt;
&lt;td style=&quot;width: 35.4263%;&quot;&gt;두 항목의 값의 크기를 비교한다.&lt;/td&gt;
&lt;td style=&quot;width: 49.031%;&quot;&gt;연관 컨테이너에 사용되는 키 값은 이 연산자가 지원되어야 한다. 컨테이너 간에 operator&amp;lt;가 사용될 때도 쓰인다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;전문가를 위한 cpp 참고.&lt;/p&gt;</description>
      <category>언어/C++</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/131</guid>
      <comments>https://sagacityjang.tistory.com/131#entry131comment</comments>
      <pubDate>Thu, 25 Feb 2021 10:33:17 +0900</pubDate>
    </item>
    <item>
      <title>C++ 캐스팅 방법 정리 표</title>
      <link>https://sagacityjang.tistory.com/128</link>
      <description>&lt;p&gt;여러가지 상황에서 사용되는 캐스팅 방법 정리&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 240px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;상황&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;캐스팅 방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;const 속성 제거&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;const_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot;&gt;int, double 간 변환처럼 언어 자체에서 허용되는 변환을 명시적으로 수행&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot;&gt;static_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot;&gt;커스텀 생성자나 변환 연산자가 구현되어 있을 때의 명시적인 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 40px;&quot;&gt;static_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;전혀 관계없는 두 객체 간의 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;불가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;같은 클래스 계층에 속하는 서로 다른 클래스 객체의 포인터 간 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;dynamic_cast(권장) 또는 static_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;같은 클래스 계층에 속하는 서로 다른 클래스 객체의 참조 간 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;dynamic_cast(권장) 또는 static_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;전혀 관계없는 두 포인터 간의 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;reinterpret_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;전혀 관계없는 두 참조 간의 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;reinterpret_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;함수 포인터 간의 변환&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;reinterpret_cast&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어/C++</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/128</guid>
      <comments>https://sagacityjang.tistory.com/128#entry128comment</comments>
      <pubDate>Wed, 10 Feb 2021 03:43:47 +0900</pubDate>
    </item>
    <item>
      <title>C++ 무엇이 있는지 한 번이라도 확인은 해봐야 하는 STL의 알고리즘 모음</title>
      <link>https://sagacityjang.tistory.com/125</link>
      <description>&lt;p&gt;알고리즘 문제를 풀면서 한번쯤은 구현해봤을 만한 알고리즘들이 STL에 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;algorithm&amp;gt; 헤더 파일에서 해당 알고리즘들을 정의한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;불변 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;불면 알고리즘은 항목의 나열을 대상으로 하여 항목의 어떤 정보를 리턴하거나 항목마다 특정 함수를 실행한다. 불변 알고리즘이므로 주어진 데이터 항목의 값이나 순서에 어떠한 변경도 가해지지 않는다. 불변 알고리즘에는 다음 표와 같이 세 가지 타입의 알고리즘이 있다. 이 알고리즘을 이용하면 컨테이너의 항목에 for 루프를 직접 사용할 일이 매우 드물 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;검색 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;이 알고리즘들은 입력 값이 정렬되어 있지 않아도 이용할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;복잡도(성능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;adjacent_find()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;주어진 값이 조건에 연속적으로 합치되는 인접한 두 항목을 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;find()&lt;br /&gt;find_if()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;주어진 값과 동일하거나, 주어진 조건이 true가 되는 첫 번째 항목을 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;find_first_of()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;find()와 같으나 동시에 여러 항목을 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;제곱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;find_if_not()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;주어진 조건이 false가 되는 첫 번째 항목을 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;search()&lt;br /&gt;find_end()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;주어진 나열 값 또는 주어진 조건과 합치되는 첫 번째(search())또는 마지막(find_end())부분열을 찾는다. 즉, 전체 대상 리스트에서 조건에 맞는 서브 리스트를 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;제고&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.3566%;&quot;&gt;search_n()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%;&quot;&gt;주어진 값이나 주어진 조건에 첫 번째로 n번 연속 합치되는 항목들을 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.2635%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;비교 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;대상 항목열이 정렬된 상태일 필요는 없고 선형의 실행 시간 복잡도를 가진다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.6279%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.6279%;&quot;&gt;equal()&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;주어진 두 항목열에서 병렬적으로 동일 순서 위치의 항목쌍들이 모두 값이 같거나 주어진 조건에 합치하는지 검사한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.6279%;&quot;&gt;mismatch()&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;주어진 두 항목열에서 병렬적으로 동일 순서 위치의 항목쌍들 중 값이 일치하지 않는 첫 번째 위치를 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.6279%;&quot;&gt;lexicographical_comapre()&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;주어진 두 항목열을 사전순에 맞춰 비교한다. 즉, 두 항목열에서 병렬적으로 동일 순서 위치의 항목쌍들을 시작 지점부터 차례대로 비교하여 서로 값이 다른 항목쌍이 있을 때 두 값의 사전적 순서를 결과로 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;유틸리티 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8604%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 73.1396%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8604%;&quot;&gt;all_of()&lt;/td&gt;
&lt;td style=&quot;width: 73.1396%;&quot;&gt;항목열이 비어 있거나 주어진 조건을 모든 항목이 만족하면 true를 리턴하고 그 외의 경우에는 false를 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8604%;&quot;&gt;any_of()&lt;/td&gt;
&lt;td style=&quot;width: 73.1396%;&quot;&gt;항목열이 비어 있거나 주어진 조건을 모든 항목이 만족시키지 못하면 false를 리턴하고 그 외의 경우에는 true를 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8604%;&quot;&gt;none_of()&lt;/td&gt;
&lt;td style=&quot;width: 73.1396%;&quot;&gt;항목열이 비어 있거나 주어진 조건을 모든 항목이 만족시키지 못하면 true를 리턴하고 그 외의 경우에는 false를 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8604%;&quot;&gt;count()&lt;br /&gt;count_if()&lt;/td&gt;
&lt;td style=&quot;width: 73.1396%;&quot;&gt;주어진 값 또는 주어진 조건에 합치되는 항목의 개수를 센다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;변경 순차 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;변경 알고리즘은 대상 항목열의 일부 또는 전체에 변경을 가한다. 어떤 경우에는 항목을 그 자리에서 바로 변경하기 때문에 원본 항목열이 변경된다. 다른 경우에는 원본 항목열에서 일부분을 다른 항목열로 복사하여 원본은 변경되지 않는다. 모드 최악 조건 실행 시간 성능이 선형 복잡도를 가진다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;변경 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 200px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;copy()&lt;br /&gt;copy_backward()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;원본 항목열에서 대상 항목열로 항목들을 복제한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;copy_if()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;주어진 조건에 대해 참인 항목을 다른 항목열로 복제한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;copy_n()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;n개의 항목을 다른 항목열로 복제한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;fill()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;모든 항목을 새로운 값으로 세팅한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;fill_n()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;첫 n개 항목을 새로운 값으로 세팅한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;generate()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;주어진 생성 함수를 모든 항목에 적용하여 생성 함수의 결과값으로 값을 세팅한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;generate_n()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;주어진 생성 함수를 첫 n개 항목에 적용하여 생성 함수의 결과값으로 값을 세팅한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;move()&lt;br /&gt;move_backward()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;항목들을 다른 항목열로 이동시킨다. 이때 이동 시맨틱을 따른다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.2093%; height: 20px;&quot;&gt;remove()&lt;br /&gt;remove_if()&lt;br /&gt;remove_copy()&lt;br /&gt;remove_copy_if()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%; height: 20px;&quot;&gt;주어진 값과 동일하거나 주어진 조건에 합치되는 항목을 제거한다. 또는 동시에 다른 항목열로 복제한다(copy 버전).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;reverse()&lt;br /&gt;reverse_copy()&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;항목열의 각 항목의 순서를 그 자리에서 거꾸로 만들거나(reverse()), 새로운 항목열에 거꾸로 된 항목열을 복사한다(reverse_copy()).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;rotate()&lt;br /&gt;rotate_copy()&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;항목열을 주어진 항목 개수만큼 그 자리에서 회전시키거나(rotate()), 회전된 항목열을 새로운 항목열에 복사한다(예:1,2,3,4,5 -&amp;gt; +2만큼 회전 -&amp;gt; 3,4,5,1,2).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;shuffle()&lt;br /&gt;random_shuffle()&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;항목들의 순서를 무작위로 뒤섞는다. 사용할 난수 생성기의 속성을 조정할 수도 있다.&lt;br /&gt;random_shuffle()은 C++14부터 사용 중단 안내되었다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;transform()&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;한 개 항목열에 대해 각 항목마다 단항 함수를 호출하거나, 두 개 항목열의 병렬적인 항목쌍에 대해 이항 함수를 호출한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;unique()&lt;br /&gt;unique_copy()&lt;/td&gt;
&lt;td style=&quot;width: 72.907%;&quot;&gt;항목열에서 연속적으로 중복되는 항목을 그 자리에서 제거하거나(unique()), 중복 항목이 제거된 항목열을 새로운 항목열로 복제한다(unique_copy()).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;작업 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 0%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.2093%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.2093%;&quot;&gt;for_each()&lt;/td&gt;
&lt;td style=&quot;width: 72.7907%;&quot;&gt;항목열의 각 항목마다 특정 함수를 실행한다. 대상 항목열은 정렬된 상태일 필요가 없고 선형 실행 시간 복잡도를 가진다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;교환 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 72.6744%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;iter_swap()&lt;br /&gt;swap_ranges()&lt;/td&gt;
&lt;td style=&quot;width: 72.6744%;&quot;&gt;두 항목(iter_swap) 또는 두 항목열(swap_ranges)을 서로 교환한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.3256%;&quot;&gt;swap()&lt;/td&gt;
&lt;td style=&quot;width: 72.6744%;&quot;&gt;주어진 두 변수의 값을 교환한다. &amp;lt;utility&amp;gt; 헤더 파일에 정의&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;분할 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.8682%; height: 20px;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%; height: 20px;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 20px;&quot;&gt;복잡도(성능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.8682%; height: 20px;&quot;&gt;is_partitioned()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%; height: 20px;&quot;&gt;항목을 구분하는 프레디킷(predicate) 함수가 섞임 없이 연속된 true와 연속된 false를 리턴하면 true를 리턴한다.&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 20px;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.8682%; height: 20px;&quot;&gt;partition()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%; height: 20px;&quot;&gt;프레디킷 함수가 true를 리턴하는 항목을 앞으로 보내고 false를 리턴하는 항목을 뒤로 보낸다. 이때 원래 항목 간 순서는 보존되지 않는다.&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 20px;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.8682%; height: 20px;&quot;&gt;stable_partition()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%; height: 20px;&quot;&gt;프레디킷 함수가 true를 리턴하는 항목을 앞으로 보내고 false를 리턴하는 항목을 뒤로 보내되 원래의 항목 간 순서가 지켜지도록 한다.&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 20px;&quot;&gt;t선형로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.8682%; height: 20px;&quot;&gt;partition_copy()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%; height: 20px;&quot;&gt;원본 항목열을 두 개의 다른 항목열로 복제한다. 이때 복제되는 항목들은 프레디킷 함수의 true 또는 false 리턴에 의해 결정된다.&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 20px;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 27.8682%; height: 20px;&quot;&gt;partition_point()&lt;/td&gt;
&lt;td style=&quot;width: 59.3798%; height: 20px;&quot;&gt;주어진 조건에 합치되는 항목을 앞에 두고 불합치되는 항목을 뒤에 두는 반복자를 리턴한다. 다시 말해, 주어진 조건에 맞는 항목과 맞지 않는 항목을 양쪽으로 나누어 그 경계를 인덱스로 가진 반복자를 리턴한다.&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 20px;&quot;&gt;로그&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;정렬 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8682%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 59.2635%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;td style=&quot;width: 12.8682%;&quot;&gt;복잡도(성능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8682%;&quot;&gt;is_sorted()&lt;br /&gt;is_sorted_until()&lt;/td&gt;
&lt;td style=&quot;width: 59.2635%;&quot;&gt;항목열 전체(is_sorted()) 또는 일부분(is_sorted_until())이 정렬된 상태인지 검사한다.&lt;/td&gt;
&lt;td style=&quot;width: 12.8682%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8682%;&quot;&gt;nth_element()&lt;/td&gt;
&lt;td style=&quot;width: 59.2635%;&quot;&gt;n번째 항목만 전체 정렬 시 위치할 곳으로 이동시킨다. n번째 항목 앞에는 n번째 항목보다 빠른 항목들이, 뒤에는 느린 항목들이 위치하나 정렬된 상태는 아니다.&lt;/td&gt;
&lt;td style=&quot;width: 12.8682%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8682%;&quot;&gt;partial_sort()&lt;/td&gt;
&lt;td style=&quot;width: 59.2635%;&quot;&gt;항목열의 처음 n개 항목만 정렬하고 나머지는 그대로 둔다. 원본에서 바로 정렬될 수도 있고(partial_sort()), 정렬 결과를 다른 항목열에 복제할 수도 있다(partial_sort_copy()).&lt;/td&gt;
&lt;td style=&quot;width: 12.8682%;&quot;&gt;선형로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8682%;&quot;&gt;sort()&lt;br /&gt;stable_sort()&lt;/td&gt;
&lt;td style=&quot;width: 59.2635%;&quot;&gt;원본에서 바로 정렬한다. 동일 항목은 순서가 바뀔 수도 있고(sort()), 순서가 유지될 수도 있다(stable_sort()).&lt;/td&gt;
&lt;td style=&quot;width: 12.8682%;&quot;&gt;선형로그&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;이진 탐색 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;대상 항목열이 최소한 찾고자 하는 항목을 기준으로 분할되어 있을 것을 요구한다. 예를 들어 str::partition()을 이용해서 충족시킬 수도 있고 전체 항목열을 정렬해서 충족시킬 수도 있다. 모두 로그 시간 성능을 가진다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.5582%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 72.4418%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.5582%;&quot;&gt;lower_bound()&lt;br /&gt;upper_bound()&lt;br /&gt;equal_range()&lt;/td&gt;
&lt;td style=&quot;width: 72.4418%;&quot;&gt;주어진 항목 값을 기준으로 가장 극단 항목을 찾는다. lower_bound()는 시작 항목, upper_bound()는 마지막 항목, equal_range()는 양 끝단 항목을 찾는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.5582%;&quot;&gt;binary_search()&lt;/td&gt;
&lt;td style=&quot;width: 72.4418%;&quot;&gt;정렬된 항목에서 이진 탐색으로 값을 찾는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;집합 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;set 컨테이너에 적용할 때 가장 적합하지만 대부분의 정렬된 컨테이너에도 적용할 수 있다. 모든 알고리즘은 선형의 최악 실행 시간을 가진다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.2171%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 57.6356%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;td style=&quot;width: 14.1472%;&quot;&gt;복잡도(성능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.2171%;&quot;&gt;inplace_merge()&lt;/td&gt;
&lt;td style=&quot;width: 57.6356%;&quot;&gt;두 정렬된 항목열을 둘 중 한 항목열에 바로 병합한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.1472%;&quot;&gt;선형로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.2171%;&quot;&gt;merge()&lt;/td&gt;
&lt;td style=&quot;width: 57.6356%;&quot;&gt;두 정렬된 항목열을 새로운 항목열로 복제하면서 병합한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.1472%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.2171%;&quot;&gt;includes()&lt;/td&gt;
&lt;td style=&quot;width: 57.6356%;&quot;&gt;어떤 항목열이 다른 항목열에 완전히 속하는지 검사한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.1472%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.2171%;&quot;&gt;set_union()&lt;br /&gt;set_intersection()&lt;br /&gt;set_difference()&lt;br /&gt;set_symmetric_difference()&lt;/td&gt;
&lt;td style=&quot;width: 57.6356%;&quot;&gt;두 개의 정렬된 항목열을 대상으로 합집합(union()), 교집합(intersection()), 차집합(difference()), 대칭차집합(symmetric_difference())을 수행하고 그 결과를 다른 항목열에 복제한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.1472%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;힙 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;배열이나 항목열의 항목들이 최댓값(또는 최소값)을 매우 빠르게 찾는데 유리한 구조를 갖추고 있다. 다음 알고리즘은 힙을 대상으로 작동한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.3333%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 57.2868%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;td style=&quot;width: 14.3798%;&quot;&gt;복잡도(성능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.3333%;&quot;&gt;is_heap()&lt;/td&gt;
&lt;td style=&quot;width: 57.2868%;&quot;&gt;주어진 범위의 항목들이 힙을 만족하는지 검사한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.3798%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.3333%;&quot;&gt;is_heap_until()&lt;/td&gt;
&lt;td style=&quot;width: 57.2868%;&quot;&gt;주어진 범위의 항목들 중에서 힙을 만족하는 가장 큰 부분 범위를 찾는다.&lt;/td&gt;
&lt;td style=&quot;width: 14.3798%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.3333%;&quot;&gt;make_heap()&lt;/td&gt;
&lt;td style=&quot;width: 57.2868%;&quot;&gt;주어진 범위의 항목들을 이용하여 힙을 만든다.&lt;/td&gt;
&lt;td style=&quot;width: 14.3798%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.3333%;&quot;&gt;push_heap()&lt;/td&gt;
&lt;td style=&quot;width: 57.2868%;&quot;&gt;힙에 항목을 추가 또는 삭제한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.3798%;&quot;&gt;선형로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.3333%;&quot;&gt;sort_heap()&lt;/td&gt;
&lt;td style=&quot;width: 57.2868%;&quot;&gt;힙을 오름차순으로 정렬된 항목열로 변환한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.3798%;&quot;&gt;선형로그&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;최대/최소 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.721%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 71.279%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.721%;&quot;&gt;min()&lt;br /&gt;max()&lt;/td&gt;
&lt;td style=&quot;width: 71.279%;&quot;&gt;주어진 2개 이상의 값 중에서 최솟값 또는 최댓값을 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.721%;&quot;&gt;minmax()&lt;/td&gt;
&lt;td style=&quot;width: 71.279%;&quot;&gt;주어진 2개 이상의 값 중에서 최솟값과 최댓값을 찾고 그 둘을 묶어서 pair 타입으로 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.721%;&quot;&gt;min_element()&lt;br /&gt;max_element()&lt;/td&gt;
&lt;td style=&quot;width: 71.279%;&quot;&gt;최솟값 항목(min_element()) 또는 최댓값 항목(max_element())을 찾는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.721%;&quot;&gt;minmax_element()&lt;/td&gt;
&lt;td style=&quot;width: 71.279%;&quot;&gt;최솟값 항목과 최댓값 항목을 찾고 그 둘을 묶어서 pair 타입으로 리턴한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;수치 처리 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;numeric&amp;gt; 헤더 파일에 정의되어 있다. 대상 항목열이 정렬된 상태일 필요는 없으며 선형 실행 시간을 가진다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.8372%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 71.1628%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.8372%;&quot;&gt;accumulate()&lt;/td&gt;
&lt;td style=&quot;width: 71.1628%;&quot;&gt;항목열의 모든 값을 누적한다. 디폴트 동작은 모든 항목에 대한 덧셈이지만, 함수 호출 측에서 다른 종류의 이항 함수(binary function, 인자가 두 개인 함수)를 지정할 수도 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.8372%;&quot;&gt;adjacent_difference()&lt;/td&gt;
&lt;td style=&quot;width: 71.1628%;&quot;&gt;주어진 범위의 부분열 a0, a1, ..., aN에 대해 a0, a1-a0, a2-a1, ... ,aN-a(N-1)을 결과열로 출력한다. 마찬가지로 디폴트인 뺄셈 대신 다른 이항 함수를 지정할 수도 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.8372%;&quot;&gt;inner_product()&lt;/td&gt;
&lt;td style=&quot;width: 71.1628%;&quot;&gt;accumulate()와 유사하나 두 개의 항목열을 대상으로 하는 것이 다르다. 두 열 각각에서 하나씩 병렬적으로 취한 항목 쌍을 대상으로 이항 함수(디폴트는 곱셈)를 호출한 다음 그 결과값을 또 다른 이상 함수를 통해 누적(디폴트는 덧셈)한다. 만약 두 열이 수학의 벡터를 의미할 경우 전체 결과값은 벡터의 내적과 동일한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.8372%;&quot;&gt;iota()&lt;/td&gt;
&lt;td style=&quot;width: 71.1628%;&quot;&gt;주어진 초기값을 각 항목에 대입하되 숫차적으로 대입할 때마다 값을 증가시킨다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.8372%;&quot;&gt;partial_sum()&lt;/td&gt;
&lt;td style=&quot;width: 71.1628%;&quot;&gt;주어진 범위의 부분열 a0, a1, ... aN에 대해 a0+a1, a0+a1+a2, ... ,a0+...+aN을 결과열로 출력한다. 이때 디폴트인 덧셈 대신 다른 이항 함수를 지정할 수도 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;순열 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.1473%;&quot;&gt;알고리즘 이름&lt;/td&gt;
&lt;td style=&quot;width: 56.0077%;&quot;&gt;알고리즘 개요&lt;/td&gt;
&lt;td style=&quot;width: 14.8449%;&quot;&gt;복잡도(성능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.1473%;&quot;&gt;is_permutation()&lt;/td&gt;
&lt;td style=&quot;width: 56.0077%;&quot;&gt;항목열이 다른 항목의 순열이면 true를 리턴한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.8449%;&quot;&gt;제곱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.1473%;&quot;&gt;next_permutation()&lt;br /&gt;prev_permutation()&lt;/td&gt;
&lt;td style=&quot;width: 56.0077%;&quot;&gt;주어진 항목열을 사전순에 따라서, 그 항목들로 생성 가능한 다음 순열 조합(next_permutation()) 또는 이전 순열 조합(prev_permutation())에 맞추어 항목열의 순서를 변환한다(예를 들어 1, 2, 3은 3!개의 순열 조합 경우의 수가 있고, 1, 2, 3 다음의 순열 조합은 1, 3, 2가 될 수 있다).&lt;br /&gt;올바르게 정렬된 상태에서 연속해서 next_permutation과 prev_permutation을 호출하면 모든 가능한 순열을 완전 탐색할 수 있다. 더 이상 탐색할 조합이 없으면 false를 리턴한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.8449%;&quot;&gt;선형&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;(불변)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- STL은 컨테이너에 복수의 스레드가 접근할 때 스레드 안정성을 보증하지 않는다.&lt;/p&gt;
&lt;p&gt;- STL은 제네릭 트리 또는 제네릭 그래프 데이터 구조를 지원하지 않는다. 비록 map과 set이 균형 이진트리로 구현되었지만 그 내부 구현이 인터페이스로 드러나 있지는 않다. 만약 파서 등의 구현을 위해 트리나 그래프 데이터 구조가 필요하다면 직접 해당 데이터 구조를 구현하거나 다른 라이브러리를 찾아봐야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 내용의 출처 &lt;span style=&quot;color: #333333;&quot;&gt;- 전문가를 위한 CPP (마크 그레고리)&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C++</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/125</guid>
      <comments>https://sagacityjang.tistory.com/125#entry125comment</comments>
      <pubDate>Thu, 4 Feb 2021 02:29:58 +0900</pubDate>
    </item>
    <item>
      <title>Unity 프랙탈 트리(Fractal Tree).  선으로 나무 그려보기</title>
      <link>https://sagacityjang.tistory.com/123</link>
      <description>&lt;p&gt;프랙탈 트리 만들기&lt;/p&gt;
&lt;p&gt;빈 오브젝트 하나 만들어서 스크립트를 추가합시다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;429&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tLRIH/btqVdMsgaSh/GvOjf6Lo0e9Akto66J47jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tLRIH/btqVdMsgaSh/GvOjf6Lo0e9Akto66J47jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tLRIH/btqVdMsgaSh/GvOjf6Lo0e9Akto66J47jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtLRIH%2FbtqVdMsgaSh%2FGvOjf6Lo0e9Akto66J47jk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;429&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;허헛;?! 이건 뭐지?!&lt;/p&gt;
&lt;p&gt;오우...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EfB8i/btqU52XWlKy/FbhiMkeDCsX0q2qCq7F4m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EfB8i/btqU52XWlKy/FbhiMkeDCsX0q2qCq7F4m0/img.png&quot; data-alt=&quot;???&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EfB8i/btqU52XWlKy/FbhiMkeDCsX0q2qCq7F4m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEfB8i%2FbtqU52XWlKy%2FFbhiMkeDCsX0q2qCq7F4m0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;???&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;잉엥????? 화면을 움직이다보면 구멍에 빠져드는 느낌이네요.. 자꾸 이상한게 만들어지네요 ㅎㅎ;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mh7q5/btqVbvSxNGA/WoYrYgTFTXbuEVqkufxEr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mh7q5/btqVbvSxNGA/WoYrYgTFTXbuEVqkufxEr0/img.png&quot; data-alt=&quot;?!?!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mh7q5/btqVbvSxNGA/WoYrYgTFTXbuEVqkufxEr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmh7q5%2FbtqVbvSxNGA%2FWoYrYgTFTXbuEVqkufxEr0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;?!?!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오우 예스 됐습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfU2Gi/btqVcrvkv5S/FeiUnyhKFOVU9aA9SOEekK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfU2Gi/btqVcrvkv5S/FeiUnyhKFOVU9aA9SOEekK/img.png&quot; data-alt=&quot;오예스 원하던 각도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfU2Gi/btqVcrvkv5S/FeiUnyhKFOVU9aA9SOEekK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfU2Gi%2FbtqVcrvkv5S%2FFeiUnyhKFOVU9aA9SOEekK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오예스 원하던 각도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 상태로 반대쪽 각도로도 추가해보니 얼핏 나무가 나왔네요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qZIQ0/btqU53vKLvW/s0FBB4Lmk0j3Ju7TaaNT0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qZIQ0/btqU53vKLvW/s0FBB4Lmk0j3Ju7TaaNT0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qZIQ0/btqU53vKLvW/s0FBB4Lmk0j3Ju7TaaNT0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqZIQ0%2FbtqU53vKLvW%2Fs0FBB4Lmk0j3Ju7TaaNT0k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;재귀 호출 개수를 높여봅시다.&lt;/p&gt;
&lt;p&gt;오예 그럴싸하게 나왔는데..? &lt;span style=&quot;color: #333333;&quot;&gt;근데 길이와 각도가 고정되니 완젼 데칼같네요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tSdCj/btqU7dLGpTh/622ZMt8MGEL3YLejfTaPt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tSdCj/btqU7dLGpTh/622ZMt8MGEL3YLejfTaPt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tSdCj/btqU7dLGpTh/622ZMt8MGEL3YLejfTaPt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtSdCj%2FbtqU7dLGpTh%2F622ZMt8MGEL3YLejfTaPt0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;좀 더 나무처럼 만들어보기 위해 길이랑 각도를 랜덤으로 만들어서 보니 꽤나 좋아졌네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k6dGY/btqVe7JGPrT/HxZw58KkvFpLy2FhLvNxQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k6dGY/btqVe7JGPrT/HxZw58KkvFpLy2FhLvNxQ1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;227&quot; height=&quot;NaN&quot; style=&quot;width: 46.0217%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k6dGY/btqVe7JGPrT/HxZw58KkvFpLy2FhLvNxQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk6dGY%2FbtqVe7JGPrT%2FHxZw58KkvFpLy2FhLvNxQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beO5TL/btqU7dZdkyK/VH7SaukiDTjRgH7wI9Qak1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beO5TL/btqU7dZdkyK/VH7SaukiDTjRgH7wI9Qak1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 52.8155%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beO5TL/btqU7dZdkyK/VH7SaukiDTjRgH7wI9Qak1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeO5TL%2FbtqU7dZdkyK%2FVH7SaukiDTjRgH7wI9Qak1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HcRvu/btqU7bUBBLa/U0mz2PuQZtpX7c5kqeXY71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HcRvu/btqU7bUBBLa/U0mz2PuQZtpX7c5kqeXY71/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 47.1254%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HcRvu/btqU7bUBBLa/U0mz2PuQZtpX7c5kqeXY71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHcRvu%2FbtqU7bUBBLa%2FU0mz2PuQZtpX7c5kqeXY71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v8YCT/btqVdNdDDwX/voIgrZqdKAvpsKiBAiWl31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v8YCT/btqVdNdDDwX/voIgrZqdKAvpsKiBAiWl31/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 51.7118%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v8YCT/btqVdNdDDwX/voIgrZqdKAvpsKiBAiWl31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv8YCT%2FbtqVdNdDDwX%2FvoIgrZqdKAvpsKiBAiWl31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;체크박스를 누르면 다른 모양을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;364&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l3MaI/btqVcroByrb/jnHSsEWtNtZ75gKl9RkEJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l3MaI/btqVcroByrb/jnHSsEWtNtZ75gKl9RkEJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l3MaI/btqVcroByrb/jnHSsEWtNtZ75gKl9RkEJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl3MaI%2FbtqVcroByrb%2FjnHSsEWtNtZ75gKl9RkEJ0%2Fimg.png&quot; width=&quot;364&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YnAbw/btqU7cTAj2r/a2Z1U76t4fldiFgVihbw01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YnAbw/btqU7cTAj2r/a2Z1U76t4fldiFgVihbw01/img.png&quot; data-alt=&quot;왼쪽은 랜덤, 오른쪽은 고정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YnAbw/btqU7cTAj2r/a2Z1U76t4fldiFgVihbw01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYnAbw%2FbtqU7cTAj2r%2Fa2Z1U76t4fldiFgVihbw01%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왼쪽은 랜덤, 오른쪽은 고정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래는 FractalTree 스크립트입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1611959376844&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FractalTree : MonoBehaviour
{
    public bool bDraw = true;

    public void DrawFixedView(Vector3 curPos, int order, float length, float angle)
    {
        Vector3 dvec = Vector3.zero;
        dvec.x = length * Mathf.Sin(angle);
        dvec.y = length * Mathf.Cos(angle);
        Debug.DrawLine(curPos, curPos + dvec);
        if (order &amp;gt; 0)
        {
            DrawFixedView(curPos + dvec, order - 1, length * 0.8f, angle - 0.5f);
            DrawFixedView(curPos + dvec, order - 1, length * 0.8f, angle + 0.5f);
        } 
    }

    public void DrawRandomTreeView(Vector3 curPos, int order, float length, float angle)
    {
        Vector3 dvec = Vector3.zero;
        dvec.x = length * Mathf.Sin(angle);
        dvec.y = length * Mathf.Cos(angle);
        Debug.DrawLine(curPos, curPos + dvec);

        if(order &amp;gt; 0)
        {
            DrawFixedView(curPos + dvec, order - 1, length * Random.Range(0.5f, 0.8f), angle - Random.Range(0.0f, 1.0f));
            DrawFixedView(curPos + dvec, order - 1, length * Random.Range(0.5f, 0.8f), angle + Random.Range(0.0f, 1.0f));
        }
    }

    private void OnDrawGizmos()
    {
        if (bDraw)
        {
            // 고정된 값
            DrawFixedView(new Vector3(-500, 0, 0), 8, 202, 0);

            // 랜덤 값
            DrawRandomTreeView(new Vector3(500, 0, 0), 8, 202, 0);
            bDraw = false;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/123</guid>
      <comments>https://sagacityjang.tistory.com/123#entry123comment</comments>
      <pubDate>Sat, 30 Jan 2021 06:53:09 +0900</pubDate>
    </item>
    <item>
      <title>콘솔용 3D엔진 만들어보자~</title>
      <link>https://sagacityjang.tistory.com/114</link>
      <description>&lt;p&gt;직접 만든 그래픽스 엔진으로 뿌려보자&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;폴리곤 완성~ 사각형 만들어서 회전시켜보기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n5UNh/btqTYQkaolR/3ccUnn2wT4mEpuDXSHJED0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n5UNh/btqTYQkaolR/3ccUnn2wT4mEpuDXSHJED0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n5UNh/btqTYQkaolR/3ccUnn2wT4mEpuDXSHJED0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn5UNh%2FbtqTYQkaolR%2F3ccUnn2wT4mEpuDXSHJED0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;큐브도 만들었다.&lt;/p&gt;
&lt;p&gt;프로젝션 행렬을 적용해서 입체적으로 보이게 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lW0Gr/btqTYP6CNiT/f7BRx38og8A1aoP79VbmD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lW0Gr/btqTYP6CNiT/f7BRx38og8A1aoP79VbmD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lW0Gr/btqTYP6CNiT/f7BRx38og8A1aoP79VbmD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlW0Gr%2FbtqTYP6CNiT%2Ff7BRx38og8A1aoP79VbmD1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>게임 개발/C++ console</category>
      <author>SagacityJang</author>
      <guid isPermaLink="true">https://sagacityjang.tistory.com/114</guid>
      <comments>https://sagacityjang.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 20 Jan 2021 02:06:17 +0900</pubDate>
    </item>
  </channel>
</rss>