<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%988%EC%A3%BC%EC%88%99%EC%A0%9C%2F%EB%AC%B8%EB%B3%B4%EC%B0%BD</id>
	<title>알고리즘8주숙제/문보창 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%988%EC%A3%BC%EC%88%99%EC%A0%9C%2F%EB%AC%B8%EB%B3%B4%EC%B0%BD"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%988%EC%A3%BC%EC%88%99%EC%A0%9C/%EB%AC%B8%EB%B3%B4%EC%B0%BD&amp;action=history"/>
	<updated>2026-05-15T23:10:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%988%EC%A3%BC%EC%88%99%EC%A0%9C/%EB%AC%B8%EB%B3%B4%EC%B0%BD&amp;diff=63310&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:30, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%988%EC%A3%BC%EC%88%99%EC%A0%9C/%EB%AC%B8%EB%B3%B4%EC%B0%BD&amp;diff=63310&amp;oldid=prev"/>
		<updated>2021-02-07T05:30:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 풀이 ==&lt;br /&gt;
== 숙제 ==&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;  &lt;br /&gt;
 using namespace std;  &lt;br /&gt;
 #include &amp;amp;lt;algorithm&amp;amp;gt;  &lt;br /&gt;
 #include &amp;amp;lt;fstream&amp;amp;gt;  &lt;br /&gt;
 #include &amp;amp;lt;string&amp;amp;gt;  &lt;br /&gt;
 #include &amp;amp;lt;vector&amp;amp;gt;  &lt;br /&gt;
 #include &amp;amp;lt;cmath&amp;amp;gt;  &lt;br /&gt;
 &lt;br /&gt;
 ifstream fin(&amp;quot;test.txt&amp;quot;);  &lt;br /&gt;
 &lt;br /&gt;
 struct Data  &lt;br /&gt;
 {  &lt;br /&gt;
     string data;  &lt;br /&gt;
     int p;  &lt;br /&gt;
     float priority;  &lt;br /&gt;
     bool operator() (const Data* a, const Data* b)  &lt;br /&gt;
     {  &lt;br /&gt;
         if (a-&amp;amp;gt;data &amp;amp;lt; b-&amp;amp;gt;data)  &lt;br /&gt;
             return true;  &lt;br /&gt;
         return false;  &lt;br /&gt;
     }  &lt;br /&gt;
 };  &lt;br /&gt;
 &lt;br /&gt;
 struct Node  &lt;br /&gt;
 {  &lt;br /&gt;
     string data;  &lt;br /&gt;
     int p;  &lt;br /&gt;
     int level;  &lt;br /&gt;
     Node* left;  &lt;br /&gt;
     Node* right;  &lt;br /&gt;
 };  &lt;br /&gt;
 &lt;br /&gt;
 vector &amp;amp;lt;Data*&amp;amp;gt; indata;  &lt;br /&gt;
 Node* root;  &lt;br /&gt;
 int sum;  &lt;br /&gt;
 &lt;br /&gt;
 bool compare(const Data* a, const Data* b)  &lt;br /&gt;
 {  &lt;br /&gt;
     if (a-&amp;amp;gt;priority &amp;amp;gt; b-&amp;amp;gt;priority)  &lt;br /&gt;
         return true;  &lt;br /&gt;
     return false;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void input()  &lt;br /&gt;
 {  &lt;br /&gt;
     int number;  &lt;br /&gt;
     fin &amp;amp;gt;&amp;amp;gt; number;  &lt;br /&gt;
 &lt;br /&gt;
     Data* d;  &lt;br /&gt;
     string data;  &lt;br /&gt;
     int p;  &lt;br /&gt;
     indata.reserve(number);  &lt;br /&gt;
 &lt;br /&gt;
     for (int i = 0; i &amp;amp;lt; number; i++)   &lt;br /&gt;
     {  &lt;br /&gt;
         fin &amp;amp;gt;&amp;amp;gt; data &amp;amp;gt;&amp;amp;gt; p;  &lt;br /&gt;
         d = new Data();  &lt;br /&gt;
         d-&amp;amp;gt;data = data;  &lt;br /&gt;
         d-&amp;amp;gt;p = p;  &lt;br /&gt;
         indata.push_back(d);  &lt;br /&gt;
     }  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void insertNode(int i)  &lt;br /&gt;
 {  &lt;br /&gt;
     Node * newNode = new Node();  &lt;br /&gt;
     newNode-&amp;amp;gt;data = indata[i]-&amp;amp;gt;data;  &lt;br /&gt;
     newNode-&amp;amp;gt;p = indata[i]-&amp;amp;gt;p;  &lt;br /&gt;
     newNode-&amp;amp;gt;left = newNode-&amp;amp;gt;right = NULL;  &lt;br /&gt;
       &lt;br /&gt;
     int l = 1;  &lt;br /&gt;
     Node * temp = root;  &lt;br /&gt;
     Node * parent = NULL;  &lt;br /&gt;
     while (temp)  &lt;br /&gt;
     {  &lt;br /&gt;
         l++;  &lt;br /&gt;
         parent = temp;  &lt;br /&gt;
         if (temp-&amp;amp;gt;data &amp;amp;lt; newNode-&amp;amp;gt;data)  &lt;br /&gt;
             temp = temp-&amp;amp;gt;right;  &lt;br /&gt;
         else if (temp-&amp;amp;gt;data &amp;amp;gt; newNode-&amp;amp;gt;data)  &lt;br /&gt;
             temp = temp-&amp;amp;gt;left;  &lt;br /&gt;
         else  &lt;br /&gt;
             return;  &lt;br /&gt;
     }  &lt;br /&gt;
     if (parent)  &lt;br /&gt;
     {  &lt;br /&gt;
         if (parent-&amp;amp;gt;data &amp;amp;lt; newNode-&amp;amp;gt;data)  &lt;br /&gt;
             parent-&amp;amp;gt;right = newNode;  &lt;br /&gt;
         else  &lt;br /&gt;
             parent-&amp;amp;gt;left = newNode;  &lt;br /&gt;
     }  &lt;br /&gt;
     else  &lt;br /&gt;
         root = newNode;  &lt;br /&gt;
     newNode-&amp;amp;gt;level = l;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void makeTree()  &lt;br /&gt;
 {  &lt;br /&gt;
     root = NULL;  &lt;br /&gt;
     for (int i = 0; i &amp;amp;lt; indata.size(); i++)  &lt;br /&gt;
         insertNode(i);  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void inorder(Node* t)  &lt;br /&gt;
 {  &lt;br /&gt;
     if (t-&amp;amp;gt;left)  &lt;br /&gt;
         inorder(t-&amp;amp;gt;left);  &lt;br /&gt;
     cout &amp;amp;lt;&amp;amp;lt; t-&amp;amp;gt;data &amp;amp;lt;&amp;amp;lt; &amp;quot; &amp;quot;;  &lt;br /&gt;
     sum = sum + t-&amp;amp;gt;level * t-&amp;amp;gt;p;  &lt;br /&gt;
     if (t-&amp;amp;gt;right)  &lt;br /&gt;
         inorder(t-&amp;amp;gt;right);  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void show()  &lt;br /&gt;
 {  &lt;br /&gt;
     sum = 0;  &lt;br /&gt;
     inorder(root);  &lt;br /&gt;
     cout &amp;amp;lt;&amp;amp;lt; &amp;quot;\n총 cost : &amp;quot; &amp;amp;lt;&amp;amp;lt; sum &amp;amp;lt;&amp;amp;lt; endl;  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 void priorPrioritySet(int left, int right, int p) &lt;br /&gt;
 { &lt;br /&gt;
     if (left &amp;amp;gt;= right)  &lt;br /&gt;
         return; &lt;br /&gt;
     indata[(left + right) / 2]-&amp;amp;gt;priority = p; &lt;br /&gt;
     priorPrioritySet(left, (left + right) / 2, p - 41); &lt;br /&gt;
     priorPrioritySet((left+right) / 2 + 1, right, p - 41); &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 void process()  &lt;br /&gt;
 {  &lt;br /&gt;
     sort(indata.begin(),indata.end(),Data()); &lt;br /&gt;
     int size = indata.size();  &lt;br /&gt;
     priorPrioritySet(0, size-1, 0); &lt;br /&gt;
     float middle = size / 2.0;  &lt;br /&gt;
 //    for (int i = 0; i &amp;amp;lt; size; i++)  &lt;br /&gt;
 //       indata[i]-&amp;amp;gt;priority += (float)indata[i]-&amp;amp;gt;p; &lt;br /&gt;
     sort(indata.begin(),indata.end(),compare);  &lt;br /&gt;
     makeTree();  &lt;br /&gt;
     show();  &lt;br /&gt;
 }  &lt;br /&gt;
 &lt;br /&gt;
 int main()  &lt;br /&gt;
 {  &lt;br /&gt;
     input();  &lt;br /&gt;
     process();  &lt;br /&gt;
     return 0;  &lt;br /&gt;
 } &lt;br /&gt;
----&lt;br /&gt;
[[알고리즘8주숙제]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>