프로그래밍

 3198, 1/160 회원가입  로그인  
   capt_0669
   [C언어]오~~~경이로운 순간: 도전 프로그래밍 THREE 도전 2: 개같은 달팽이배열을 끝냈다....답?보고 싶으신분 보세요^^

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3045 [복사]


드디어 다 끝냈습니다.

지금까지 노래들으면서 하니깐 집중도 안되고 이랬는데
아이유노래는 집중이 잘되네요 ㅋㅋㅋㅋ

일단 "prosthetics" 님 정말 감사해요
관계성 찾기에서 관계성의 뜻도 모르고 (한쿸어 노무 햑해효) 어떻게 해야될지 몰랐었는데 정말 좋은 글써주셔서 잘 할수있었습니다^^
그리고
"endosymbiosis" 이분 코드 써주셨는데 반대긴 했지만 첨에 딱 실행해보고 이분 뭐지!!하고 영감을 받았습니다
어쨋든 제 코드와 endosymbiosis님의 코드 둘다 써볼께요^^
::
제꺼::
#include <stdio.h>

int main(void)
{
        int n;                                        //sides
        int a,b;
        int count=1;
        int arr[16][16];                //16 is the most optimazation
        int i,j;

        printf("숫자를 입력하시오(1 - 16): ");
        scanf("%d", &n);
        printf("\n");

        if(n%2==0)
        {
                for(b=1;count!=n*n+1;b++)
                {
                        for(a=b-1;a<=n-b;a++)
                                arr[b-1][a]=count++;
                        for(a=b;a<=n-b;a++)
                                arr[a][n-b]=count++;
                        for(a=n-b-1;a>=b-1;a--)
                                arr[n-b][a]=count++;
                        for(a=n-b-1;a>=b;a--)
                                arr[a][b-1]=count++;
                }
        }
        else
        {
                for(b=1;count!=n*n+1;b++)
                {
                        for(a=b-1;a<=n-b;a++)
                                arr[b-1][a]=count++;
                        for(a=b;a<=n-b;a++)
                                arr[a][n-b]=count++;
                        for(a=n-b-1;a>=b-1;a--)
                                arr[n-b][a]=count++;
                        for(a=n-b-1;a>=b;a--)
                                arr[a][b-1]=count++;
                }
        }
        for(i=0;i<=n-1;i++)
        {
                for(j=0;j<=n-1;j++)
                        printf("%4d ", arr[i][j]);
                printf("\n");
        }

        return 0;
}



endosymbiosis님의 코드::

#include<stdio.h>

int main(void)
{
int input, array[15][15]={0}, i=0, j=0, top=0, bottom=0, count=1, direct=1;
printf("Input your number (1-15):");
scanf("%d", &input);
bottom=input;

while(array[i][j]==0)
{
        if(direct)
        {
                if(i<bottom-1)
                        array[i++][j]=count++;
                else if(j<bottom)
                        array[i][j++]=count++;
                if(j==bottom)
                {
                        i--;
                        j--;
                        bottom--;
                        direct=0;
                }
        }
        else
        {
                if(i>top)
                        array[i--][j]=count++;
                else if(j>top)
                        array[i][j--]=count++;
                if(j==top)
                {
                        j++;
                        i++;
                        top++;
                        direct=1;
                }
        }
};

for(i=0;i<input;i++)
{
        for(j=0;j<input;j++)
        {
                printf("%4d", array[i][j]);
        }
        printf("\n");
}
printf("\n");

return 0;
}




제꺼는 16이 maximum이고 endodjsfklfjsdkf님은 15가 max인데요

15나 16이 제 cmd창을 꽉채울수있는거고
더 위로 17이상으로 가면 더럽게 나가요
그러니깐 15나 16이 딱 적당해요 ㅎㅎ



어쨋든 도와주신분 감사합니다^^

  Hit : 5792     Date : 2011/06/09 02:39



    
늅늅 자유게시판이요 2011/06/09  
prosthetics 자유게시판이 어울리긴 합니다만요 도움이 됬다니 기쁩니다. 2011/06/09  
endosymbiosis Excellent~ 조언을 몇가지 하겠습니다. 저도 상당히 어려운 부분이긴 한데 최적화하는 것을 신경쓰셔야 합니다. 아래는 그에 대한 몇가지 사항입니다. 저는 이중 for문이 컴퓨터에게 주는 부담감을 알고 있어서 안썼습니다. 삼중 for문 들어가는 순간 프로그래머의 자질은 사라집니다. (어쩔 수 없는 출력은 예외)

1. 쓸모없는 조건문 때문에 소스 길이가 늘어났습니다.
if(n%2==0) else 이거 지우시고 이중 for문 하나만 입력하시면 됩니다.

2. int i,j; 는 출력을 위한 것인데 a, b로 그냥 사용하시면 됩니다.

3. 그리고 소스 상의 문제는 아니지만
for(i=0;i<=n-1;i++)

이런 식으로 사용하시면 for문이 얼마나 반복되는지 헤깔릴 수가 있습니다. 따라서 프로그래머라면,
for(i=0;i<n;i++) 이런 식으로 만들어서 조건문에 =은 되도록 생략하는 것이 좋습니다.
즉, 컴파일러 상에서 차이는 없지만 보는 사람 입장에서 생각하는 것이 좋습니다.

4. 위쪽 길이 입력받는 곳에서
scanf("%d", &n); printf("\n"); 를 사용하셨는데, printf("\n");은 의미가 없는 소스입니다.
깔끔하게 한줄 띄웠다고 생각하지만 컴퓨터 입장에서는 굳이 필요없죠.
2011/06/10  
capt_0669 아....
조건문이 필요가 없었네요 ㅎㅎ
전 꼭 필요한줄 알고 써봤는데 endosymbiosis님 정말 대단하십니다

어쨋든 님이 조언해주신거대로 해도 작동되고
더 짧아졌네요
감사합니다

그런데 삼중 for문이 들어가는 순간 프로그래머의 자질은 사라진다니...ㄷㄷㄷ
참고하겠습니다
2011/06/14