SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
www.swexpertacademy.com
나름의 규칙을 찾아내서 그걸 코드로 표현했다.
빙글빙글 도는 순서가 오른쪽, 아래, 왼쪽, 위로 반복되기 때문에 dir 변수에 0~3 값을 넣어주면서 방향을 구분했다.
그리고 바깥에서 안으로 숫자를 채워가므로 startY, endY, startX, endX 변수를 이용해서 경계가 될 index를 관리하면서 경계를 만나면 방향을 바꿔주었다.
#include <iostream>
#include <ios>
using namespace std;
int T, N, snail[10][10];
void makeSnail();
void print();
int main() {
cin.tie(0); ios::sync_with_stdio(0);
cin >> T;
for (int testCase = 1; testCase <= T; testCase++) {
cin >> N;
cout << '#' << testCase << ' ' << "\n";
makeSnail();
}
return 0;
}
void makeSnail() {
int idx = N*N;
int y = 0, x = 0, num = 1;
int startY = 0, endY = N - 1, startX = 0, endX = N - 1;
int dir = 0; // 0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위
while (idx) {
snail[y][x] = num;
switch (dir) {
case 0:
if (x != endX) x = x + 1;
else { startY++; dir++; y++; }
break;
case 1:
if (y != endY) y = y + 1;
else { endX--; dir++; x--; }
break;
case 2:
if (x != startX) x = x - 1;
else { endY--; dir++; y--; }
break;
case 3:
if (y != startY)y = y - 1;
else { startX++; dir = 0; x++; }
break;
}
num++;
idx--;
}
print();
}
void print() {
for (int y = 0; y < N; y++) {
for (int x = 0; x < N; x++) {
cout << snail[y][x] << ' ';
}
cout << "\n";
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 1859. 백만 장자 프로젝트 (0) | 2019.04.24 |
---|---|
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 (0) | 2019.04.22 |
[SWEA] 1926. 간단한 369게임 (0) | 2019.04.17 |
[SWEA] 2005. 파스칼의 삼각형 (0) | 2019.04.17 |
[SWEA] 1940. 가랏! RC카! (0) | 2019.04.17 |
댓글