kwony 2015. 10. 15. 11:34

처음에는 엄청 어려운 문제인줄 알았다... 색종이가 판의 경계에도 놓일 수 있다면 이건 정말 어려운 문제고 초딩용으로는 전혀 적합하지 않은 문제라 생각했다..


그런데 문제를 꼼꼼히 읽어보니 하나의 색종이는 하나의 판에만 놓일 수 있다는 조건을 확인했다. 그러면 문제가 정말 쉬워진다. 색종이 큰 것 부터 탐색하고 남는 것들을 채워나가는 식으로 하면 된다.


이런 문제는 코드를 깔끔이 짜는것이 관건이다. 잘못하다간 자신도 코드를 알아보지 못하는 경우가 있기 때문이다. 반드시 수기 작업에서 변수명까지 선언해준 후 컴퓨터로 옮기도록 하자


 
#include<cstdio>

int main(){

	int d[7];
	for(int i=1; i<7; i++)
		scanf("%d", &d[i]);

	int res=0;
	for(int cur=6; cur>0; cur--){
		while(d[cur]!=0){
			res++;
			int rem = 36 - cur*cur;
			d[cur]--;
			int end = 6-cur;

			for(int piv=end; piv>0 && rem>0; piv--){
				while(d[piv]>0 && rem>0){
					if(rem >= piv*piv)
					{
						rem -= piv*piv;
						d[piv]--;
					}
					else
						break;
				}
			}
		}
	}

	printf("%d\n", res);
	return 0;
}