본문 바로가기
Programming/BOJ

[C/C++] 백준 #1913 달팽이(수학)

by 작은별하나 2022. 11. 3.
반응형

이번 문제는 C언어를 배우다보면 자주 나오는 달팽이 수열을 적는 것입니다.  일반적으로 왼쪽 위가 1의 자리이지만, 이번 수열은 가운데가 1의 자리입니다.  그래서 N은 홀수로 제한됩니다.

 

snail

 

그냥 가운데부터 시작해서 차례차례 적어도 되고요.  숫자를 감소시키면서 거꾸로 적어나가도 됩니다.  저는 계산에 의해서 수열을 적었습니다.  굳이 이럴 이유는 하나도 없습니다.  성능상 이슈가 있는 것도 아니니까요.

 

제가 작성한 소스입니다.  소스는 참고용으로 봐주세요.

//------------------------------------------------
//    baekjoon #1913
//        - by Aubrey Choi
//        - created at 2019-07-22
//------------------------------------------------
#include <stdio.h>

int main()
{
    int n, m, v[1000][1000], sx, sy;
    scanf("%d%d", &n, &m);
    int c = n/2+1;
    v[c][c] = 1;
    for(int i = 1; i < n; i += 2)
    {
        c--;
        for(int j = 1; j < i+2; j++)
        {
            v[c][c+j] = i*i+j;
            v[c+j][c+i+1] = i*i+i+j+1;
            v[c+i+1][c+i+1-j] = i*i+(i+1)*2+j;
            v[c+i+1-j][c] = i*i+(i+1)*3+j;
        }
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(v[i][j] == m) sy=i, sx=j;
            printf("%d ", v[i][j]);
        }
        putchar('\n');
    }
    printf("%d %d\n", sy, sx);
}
728x90

댓글