<?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=Marbles%2F%EC%9D%B4%EB%8F%99%ED%98%84</id>
	<title>Marbles/이동현 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=Marbles%2F%EC%9D%B4%EB%8F%99%ED%98%84"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Marbles/%EC%9D%B4%EB%8F%99%ED%98%84&amp;action=history"/>
	<updated>2026-05-14T18:16:10Z</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=Marbles/%EC%9D%B4%EB%8F%99%ED%98%84&amp;diff=34619&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=Marbles/%EC%9D%B4%EB%8F%99%ED%98%84&amp;diff=34619&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:45Z</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;[[Marbles]]&lt;br /&gt;
===== 소감 =====&lt;br /&gt;
&lt;br /&gt;
일종의 산수문제 같기도 하고,&lt;br /&gt;
수식을 생각하는것은 어렵지 않았지만&lt;br /&gt;
프로그램의 실행시간을 줄이는데 시간이 들었다.&lt;br /&gt;
프로그램은 다음과 같은 원리로 동작한다.&lt;br /&gt;
ex)&lt;br /&gt;
43&lt;br /&gt;
1 3 -&amp;gt; 개당수납비용이 최소&lt;br /&gt;
2 4&lt;br /&gt;
일때 n = bq+r 이용&lt;br /&gt;
43 = 14*3+1 = 3333333333333+3+1 = 3333333333333+4 =&amp;gt; 13, 1&lt;br /&gt;
&lt;br /&gt;
35&lt;br /&gt;
1 5 -&amp;gt; 개당수납비용이 최소&lt;br /&gt;
20 7&lt;br /&gt;
일때&lt;br /&gt;
35 = 7*5+0 = 5555555+0 =&amp;gt;7, 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;수정 05 05 15&amp;gt;&lt;br /&gt;
이 프로그램의 약점은 n2의 크기가 커지면 실행시간이 늘어난다는 점이다.&lt;br /&gt;
n2가 작은 수라면 금방 끝나지만 다음과 같은 worst case일때는 약 몇억번의 루프를 돌아야 한다.&lt;br /&gt;
2000000000&lt;br /&gt;
1 3&lt;br /&gt;
1900000000 1900000000&lt;br /&gt;
그 점을 수정하여 굉장히 빠른 속도로 처리 가능하게 함. 덕분에 코드가 복잡해짐;; &lt;br /&gt;
아.. 수정후 버그속출 ㅠㅠ&lt;br /&gt;
&lt;br /&gt;
===== 코드 =====&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;  &lt;br /&gt;
 using namespace std;  &lt;br /&gt;
 &lt;br /&gt;
 void main(){ &lt;br /&gt;
 	int N[100], n1[100], c1[100], n2[100], c2[100];  &lt;br /&gt;
 	int tot_arr = 0;  &lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;100;i++){  &lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; N[i]; &lt;br /&gt;
 		if(N[i] == 0)   &lt;br /&gt;
 			break; &lt;br /&gt;
 		cin &amp;amp;gt;&amp;amp;gt; c1[i]&amp;amp;gt;&amp;amp;gt; n1[i]&amp;amp;gt;&amp;amp;gt; c2[i] &amp;amp;gt;&amp;amp;gt; n2[i]; &lt;br /&gt;
 		tot_arr++; &lt;br /&gt;
 	} &lt;br /&gt;
 	for(i=0;i&amp;amp;lt;tot_arr;i++){  &lt;br /&gt;
 		if(c1[i]/(double)n1[i] &amp;amp;gt; c2[i]/(double)n2[i])   //n1에 개당수납비용이 최소인 상자가 오게함. &lt;br /&gt;
 			swap(n1[i],n2[i]);                       &lt;br /&gt;
 		int r = N[i]%n1[i];  &lt;br /&gt;
 		int m1 = N[i]/n1[i];  &lt;br /&gt;
 		int m2 = -1;     &lt;br /&gt;
 		for(int k=0; k&amp;amp;lt;=n2[i] ;k++){        &lt;br /&gt;
 			if(r%n2[i]==0){  &lt;br /&gt;
 				m2=r/n2[i];     &lt;br /&gt;
 				cout &amp;amp;lt;&amp;amp;lt;n1[i]&amp;amp;lt;&amp;amp;lt;&amp;quot;들이박스 &amp;quot;&amp;amp;lt;&amp;amp;lt;m1&amp;amp;lt;&amp;amp;lt;&amp;quot;개 필요 &amp;quot;&amp;amp;lt;&amp;amp;lt;n2[i]&amp;amp;lt;&amp;amp;lt;&amp;quot;들이박스 &amp;quot;&amp;amp;lt;&amp;amp;lt;m2&amp;amp;lt;&amp;amp;lt;&amp;quot;개 필요 &amp;quot;&amp;amp;lt;&amp;amp;lt;&amp;quot;\n&amp;quot;;                             &lt;br /&gt;
 				break;                           &lt;br /&gt;
 			}                        &lt;br /&gt;
 			r = ((n2[i]/n1[i]==0?1:n2[i]/n1[i])*k+1)*n1[i] + (N[i]%n1[i]);	//r은 n2보다 큰 가장 작은 n1의 배수에 N[i]%n1[i]을 더한 값.		&lt;br /&gt;
                            if(r-n2[i]&amp;amp;gt;=n1[i])&lt;br /&gt;
 				r-=n1[i];&lt;br /&gt;
 			if(r&amp;amp;gt;N[i] || r&amp;amp;lt;0){&lt;br /&gt;
 				int tempk;&lt;br /&gt;
 				if(n2[i]*k&amp;amp;gt;N[i])&lt;br /&gt;
 					tempk = k-1;				&lt;br /&gt;
 				else&lt;br /&gt;
 					tempk = k;				&lt;br /&gt;
 				if((N[i]-n2[i]*tempk)%n1[i] == 0)&lt;br /&gt;
 					r = n2[i]*tempk;&lt;br /&gt;
 				else&lt;br /&gt;
 					break;&lt;br /&gt;
 			}			&lt;br /&gt;
 			m1=(N[i]-r)/n1[i];				&lt;br /&gt;
 		}  &lt;br /&gt;
 		if(m2 == -1) &lt;br /&gt;
 			cout &amp;amp;lt;&amp;amp;lt; &amp;quot;failed\n&amp;quot;;      &lt;br /&gt;
 		cout &amp;amp;lt;&amp;amp;lt;&amp;quot;total &amp;quot; &amp;amp;lt;&amp;amp;lt; k &amp;amp;lt;&amp;amp;lt; &amp;quot; roops\n&amp;quot;;&lt;br /&gt;
 	} &lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
수정 전&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;iostream&amp;amp;gt;  &lt;br /&gt;
 using namespace std;  &lt;br /&gt;
  &lt;br /&gt;
 void main(){ &lt;br /&gt;
         int N[100], n1[100], c1[100], n2[100], c2[100];  &lt;br /&gt;
         int tot_arr = 0;  &lt;br /&gt;
         for(int i=0;i&amp;amp;lt;100;i++){  &lt;br /&gt;
                 cin &amp;amp;gt;&amp;amp;gt; N[i]; &lt;br /&gt;
                 if(N[i] == 0)   &lt;br /&gt;
                         break; &lt;br /&gt;
                 cin &amp;amp;gt;&amp;amp;gt; c1[i]&amp;amp;gt;&amp;amp;gt; n1[i]&amp;amp;gt;&amp;amp;gt; c2[i] &amp;amp;gt;&amp;amp;gt; n2[i]; &lt;br /&gt;
                 tot_arr++; &lt;br /&gt;
         } &lt;br /&gt;
         for(i=0;i&amp;amp;lt;tot_arr;i++){  &lt;br /&gt;
                 if(c1[i]/(double)n1[i] &amp;amp;gt; c2[i]/(double)n2[i])   //n1에 개당수납비용이 최소인 상자가 오게함. &lt;br /&gt;
                         swap(n1[i],n2[i]);                       &lt;br /&gt;
                 int r = N[i]%n1[i];  &lt;br /&gt;
                 int m1 = N[i]/n1[i];  &lt;br /&gt;
                 int m2 = -1;     &lt;br /&gt;
                 for(int roop=0; roop&amp;amp;lt;=n2[i] ; roop++){ //루프는 n2만큼 돌린다. 아래에서 r에 n1이 n2만큼 더해지면 n2*n1+r이 되며 &lt;br /&gt;
                                                        //이는 (n2*n1+r)%n2 == r%n2가 되기 때문에 roop=n2이후부터는 이전것의 순환이 된다.             &lt;br /&gt;
                         if(r%n2[i]==0){  &lt;br /&gt;
                                  m2=r/n2[i];     &lt;br /&gt;
                                 cout &amp;amp;lt;&amp;amp;lt;n1[i]&amp;amp;lt;&amp;amp;lt;&amp;quot;들이박스 &amp;quot;&amp;amp;lt;&amp;amp;lt;m1&amp;amp;lt;&amp;amp;lt;&amp;quot;개 필요 &amp;quot;&amp;amp;lt;&amp;amp;lt;n2[i]&amp;amp;lt;&amp;amp;lt;&amp;quot;들이박스 &amp;quot;&amp;amp;lt;&amp;amp;lt;m2&amp;amp;lt;&amp;amp;lt;&amp;quot;개 필요 &amp;quot;&amp;amp;lt;&amp;amp;lt;&amp;quot;\n&amp;quot;;                             &lt;br /&gt;
                                 break;                           &lt;br /&gt;
                         }                        &lt;br /&gt;
                         r+=n1[i];                                &lt;br /&gt;
                         m1--;    &lt;br /&gt;
                 }  &lt;br /&gt;
                 if(m2 == -1) &lt;br /&gt;
                         cout &amp;amp;lt;&amp;amp;lt; &amp;quot;failed\n&amp;quot;;      &lt;br /&gt;
         } &lt;br /&gt;
 }&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>