문제 : https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
코드 :
#include <iostream>
using namespace std;
int main()
{
int T;
cin >> T;
int c = 0;
while (c < T)
{
int N;
cin >> N;
int num[10][10] = { 0 };
int move[4][2] = { {0,1}, {1,0}, {0,-1}, {-1,0} };
int total = N * N;
int i = 0;
int j = 0;
int m = 0;
for (int k = 1; k <= total; k++)
{
num[i][j] = k;
i += move[m][0];
j += move[m][1];
//범위 밖
if ((i < 0 || i >= N) || (j < 0 || j >= N) || (num[i][j] != 0))
{
i -= move[m][0];
j -= move[m][1];
m++;
if (m % 4 == 0)
{
m = 0;
}
i += move[m][0];
j += move[m][1];
}
}
c++;
cout << "#" << c << "\n";
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
cout << num[i][j] << " ";
}
cout << "\n";
}
}
return 0;
}
문제접근은 방문->이동->조건 식으로 생각하여 구현하였다.
다른 사람들 풀이를 보니 대부분 나와 비슷하게 풀었다.
나는 X+1, Y+1, X -1, Y -1 순으로 하나씩 생각했다면
대부분
- 처음엔 x, y 둘다 +1씩 그다음 x,y -1씩 이동하는 규칙
- 세로로 이동할땐 항상 갯수를 하나씩 빼줘야 한다.
'algorithm > SW Expert Academy' 카테고리의 다른 글
[모의 SW 역량테스트] 보호 필름 - 2112 (0) | 2020.02.02 |
---|---|
단순 2진 암호코드 - 1240 (0) | 2020.01.11 |
[2차원 배열 연습 문제] 스도쿠 검증 - 1974 (0) | 2020.01.08 |
[1차원 배열 연습 문제] View - 1206 (0) | 2020.01.08 |
[1차원 배열 연습 문제] 최빈수 구하기 - 1204 (0) | 2020.01.08 |
댓글