본문 바로가기

SWEA/D2

[SWEA 1954][D2][JAVA] 달팽이 숫자

[문제]

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

 

[풀이 방법]

 

정처기 실기 문제집에서 봤던 문제인데 다시 만나니까 반가운 문제네요. 

 

시계방향으로 총 4가지의 방향이 나올 수 있습니다. 

위쪽 가로 방향(정방향)  / 오른쪽 아래 방향 / 아래쪽 가로 방향 (역방향) / 왼쪽 윗 방향

 

이 네가지 경우를 나눠서 증가하는 값을 이차원 배열에 저장하면 됩니다. 

 

그리고 4 방향이 끝난 후에는 계산하는 배열의 숫자가 2씩 줄어듭니다. 

4 -> 3 -> 3-> 2

2-> 1-> 1 -> 끝

 

2씩 줄어드는 반복문을 가장 바깥쪽으로 둔 후에 index 변수로 각 좌표의 증가하거나 고정되는 값을 정해주면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
int index=0;
 
int i=1;
 
int row,col;
 
for(intj=N;j;0;j-=2){
 
 
 
/**
 
*3-;2-;2-;1
 
*1,1-;1,2-;1,3-;2,3-;3,3-;3,2-;3,1-;2,1-;2,2
 
*/
 
for(row=0;row<j;row++){//-;
 
    map[index][index+row]=i++;
 
}
 
for(col=1;col<j;col++){//오른쪽아래
 
    map[index+col][N-index-1]=i++;
 
}
 
for(row=1;row<j;row++){//;-
 
    map[N-index-1][N-index-row-1]=i++;
 
}
 
for(col=1;col<j-1;col++){//왼쪽위
 
    map[N-index-col-1][index]=i++;
 
}
 
    index++;
 
}
 
 
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter