SWEA
SWEA - 달팽이 숫자 1954 (c++)
Daekyue
2023. 11. 6. 19:23
[D2] 달팽이 숫자 - 1954
출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T;
int N;
int board[10][10];
cin >> T;
int dx[4] = { 0, 1, 0, -1 };
int dy[4] = { 1, 0, -1, 0 };
for (test_case = 1; test_case <= T; ++test_case)
{
int num = 1;
int dist = 0;
int x = 0, y = 0;
cin >> N;
cout << "#" << test_case << "\n";
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
board[i][j] = 0;
board[0][0] = num;
while (num != N * N)
{
num++;
x = x + dx[dist % 4];
y = y + dy[dist % 4];
if (x < 0 || y < 0 || x >= N || y >= N || board[x][y] != 0)
{
x = x - dx[dist % 4];
y = y - dy[dist % 4];
dist++;
num--;
}
board[x][y] = num;
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
cout << board[i][j] << " ";
cout << "\n";
}
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
이 문제는 오른쪽 아래쪽 왼쪽 위쪽 순서로 숫자가 추가되는 성질을 이용하여 방향을 전환해야될 때 dist의 값을 바꿔주는 방식으로 문제를 해결했다