본문 바로가기
프로그래밍/알고리즘

1707: 달팽이사각형

by 카라미 2015. 4. 21.

정보 올림피아드 1707 번 

1707: 달팽이사각형

시간제한: 1 Sec  메모리제한: 64 MB
제출: 1802  해결: 839

정사각형의 크기를 입력 받은 후 시계방향으로 돌면서 다음과 같은 형태로 출력하는 프로그램을 작성하시오.

< 처리조건 >
(1) 가장 왼쪽 위의 좌표부터 차례로 숫자를 대입시킨다.
(2) 오른쪽으로 채워 나가다가 끝이면 다시 아래 → 왼쪽 → 위 →오른쪽의 순으로 모두 채워질때까지 반복한다.

 

정사각형의 크기 n(1부터 100사이의 정수)을 입력받는다.

위에서 언급한 형태로 정사각형의 내부 숫자를 차례로 채운 후의 모습을 출력한다. 숫자 사이는 공백으로 구분한다.

3

1 2 3
8 9 4
7 6 5

<<해결방법>>

문제를 푸는 핵심은 반복되는 패턴을 찾는 것!!

반복횟수를 보면 오른쪽으로 5번, 아래로 4번, 왼쪽으로 4번

위로 3번, 다시 오른쪽으로 3번, 아래로 2번, 왼쪽으로 1번..

이런식으로 반복이 일어나는것을 볼 수 있습니다.


처음은 n 번 다음은 n-1번이 두번, 다시 n-2번이 두번 이런식으로

반복됩니다.





int[][] arr = new int[count][count];

int m = count; //이동횟수

int x=0,y=-1;//배열index

int num = 1;

while(m>0){

//오른쪽으로

for(int i = 0; i<m; i++){

arr[x][++y] = num++;

}

m--;

//아래로

for(int i = 0; i<m; i++){

arr[++x][y] = num++;

}

//왼쪽으로

for(int i = 0; i<m; i++){

arr[x][--y] = num++;

}

m--;

//위로

for(int i = 0; i<m; i++){

arr[--x][y] = num++;

}


값을 담을 2차원 배열을 하나 생성하고, 이동횟수가 0이 될때까지 반복하면서 

출력해주면 됩니다.  

공유한 파일에는 마름모 달팽이를 출력하는 메소드도 추가되어 있습니다.

마름모 달팽이는 다음 글에서....



2

1 2
4 3

 

'프로그래밍 > 알고리즘' 카테고리의 다른 글

1495: 대각선 지그재그  (0) 2015.04.21
1997: 떡 먹는 호랑이  (0) 2015.04.21
2074: 마방진  (0) 2015.04.21
1014: 돌다리 건너기  (0) 2015.04.21
1331: 문자마름모  (0) 2015.04.21