- 문제 설명
크기가 N*N인 2차원 배열에 다음과 같은 나선형 모양의 순서로 1부터 숫자가 들어감
크기 N, 행, 열 값이 주어지면 해당 숫자 출력
5<=N<100, N은 홀수
행과 열은 0부터 시작
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
- 입력
1 // 테스트케이스 갯수
5 3 2 // N, 행, 열
- 출력
#1 22
- 입력예시
3
5 3 2
5 4 4
9 6 3
- 출력예시
#1 22
#2 9
#3 68
- 코드
int arr[100][100];
int main(int argc, const char * argv[]) {
int T;
scanf("%d", &T);
for(int tc = 1;tc <= T;tc++)
{
int N, row, col;
scanf("%d %d %d",&N,&row,&col);
int num = 1;
int count = 0;
for(int i=0;i<2*N-1;i++) // 한 라인 기준으로 총 2*N-1번 돔
{
for(int j=0;j<N-count;j++) // 카운트 수 만큼 줄어듬
{
if(i%4 == 0) // 우측방향
{
arr[i/4][j+i/4] = num;
}
else if(i%4 == 1) // 아래 방향
{
arr[j+i/4+1][N-1-i/4] = num;
}
else if(i%4 == 2) // 왼쪽 방향
{
arr[N-1-i/4][N-1-i/4-j-1] = num;
}
else // 위 방향
{
arr[N-1-(i/4+1)-j][i/4] = num;
}
num++;
}
if(i%4 == 0 || i%4 == 2) // 채울 숫자가 줄어드는 구간
count++;
}
printf("#%d %d\n",tc,arr[row][col]);
}
return 0;
}
'교육 > 문제해결' 카테고리의 다른 글
[1일차] 부분 배열의 합 (0) | 2017.08.28 |
---|---|
[1일차] 사선으로 채우기 (0) | 2017.08.28 |
[1일차] 가장 많은 숫자카드 찾기 (0) | 2017.08.28 |
[1일차] 가장 큰수와 작은 수의 차이 출력하기 (0) | 2017.08.28 |
회사 교육으로 알고리즘을 듣는데 (0) | 2017.08.28 |