알고리즘/acmicpc
2590
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;
}