
#include <stdio.h>
#include <stdlib.h>
int main()
{
freopen("input.txt","r", stdin);
freopen("output.txt","w", stdout);
int a[200][200];
int m,n,b,c,cnt1=1,cnt2=1,d=0;
scanf("%d %d",&m,&n);
if(m>100){goto p1;}
if(m<n){goto p1;}
if(m<1){goto p1;}
if(n<1){goto p1;}
if(m%n>0){d=m/n+2;}
else if(m%n==0)
{
d=m/n+1;
}
for(b=1;b<d;b++)
{
for(c=0;c<n;c++)
{
if(cnt1==m+1)
{
goto p;
}
else if(b%2==0)
{
a[b][n-1-c]=cnt1;
cnt1=cnt1+1;
}
else if(b%2>0)
{
a[b][c]=cnt1;
cnt1=cnt1+1;
}
}
}
p: for(b=1;b<d;b++)
{
for(c=0;c<n;c++)
{
if(m<100){
if(a[b][c]==0)
{
printf(" ");
}
else if(cnt2==m)
{
if(a[b][c]<10)
{
printf("0");
}
printf("%d",a[b][c]);
}
else if(c==n-1)
{
if(a[b][c]<10)
{
printf("0");
}
printf("%d\n",a[b][c]);
cnt2=cnt2+1;
}
else if(c<n-1)
{
if(a[b][c]<10)
{
printf("0");
}
printf("%d ",a[b][c]);
cnt2=cnt2+1;
}
}
else if(m>=100)
{
if(a[b][c]==0)
{
printf(" ");
}
else if(cnt2==m)
{
if(a[b][c]<100)
{
printf("0");
if(a[b][c]<10){printf("0");}
}
printf("%d",a[b][c]);
}
else if(c==n-1)
{
if(a[b][c]<100)
{
printf("0");
if(a[b][c]<10){printf("0");}
}
printf("%d\n",a[b][c]);
cnt2=cnt2+1;
}
else if(c<n-1)
{
if(a[b][c]<100)
{
printf("0");
if(a[b][c]<10){printf("0");}
}
printf("%d ",a[b][c]);
cnt2=cnt2+1;
}
}}
}
p1: return 0;
}
제가쓴코드인대....
벌써4일째풀고있습니다...도와주세요...
코딩은 최대한 간결하고, 이해하기 쉽고, 알고리즘에 알맞도록 작성하셔야 합니다.
대회나 시간의 제한이 걸려있는 때에는 생각나는 대로 긴급히 상황에 맞추어 발생한 문제를 해결하는 코드를 집어넣는 방법을 쓰실 수 있지만, 그것이 아닌 연습에서는, 문제를 맞추는 것의 목적으로만 작성한 코드는 매우 그르다고 생각합니다.
최대한 적합한 알고리즘, 그리고 빠른 시간복잡도를 가진 코드를 알맞는 코드로 구현하는 것이 옳습니다.
이것은 전반적인 구현의 형태의 기반이 됩니다.
먼저 머릿속으로 가장 옳은 형태의 알고리즘을 생각하십시오. 그리고나서 구현할 방향을 잡으시는 것이 좋습니다.
풀 방법을 글로 혹은 머리로 정리하셔보면 좋을 것입니다.
ps. 참고로, go to 문은 가독성이 좋지 않은 편이라 별로 권장해드리지는 않습니다.