728x90

구름 edu에서 CosPro 1급 문제를 풀다가 소용돌이 수의 대각선의 합을 구하라는 문제를 풀었다.
저번에 비슷한 문제를 보고 소용돌이를 만들지 못했었다.
근데 이번엔 됐다! 자세하진 않지만 설명은 주석으로 되어있다.
그래도 보면 이해가 될 것이라고 생각한다.
#include <iostream>
#include <iomanip>
using namespace std;
//구름 edu cospro 소용돌이 수
int main() {
const int n = 4;
int nArr[n][n] = {0};
int i = 0, j = 0;
int checkIdx = 0;//방향을 이 변수를 통해 확인한다.
int num = 1;
while (num <= n * n) {
//체크 안한거
nArr[i][j] = num++;
//벽(배열의 범위가 아님)이거나 이미 숫자가 있을때 방향 이동
if (checkIdx % 4 == 0) { // 오른쪽으로 가야함
if (j + 1 == n || nArr[i][j + 1] != 0) { i++; checkIdx++; }//가려는 곳이 벽이거나 이미 숫자가 있을때 방향 이동
else { j++; }
}
else if (checkIdx % 4 == 1) { //아래로
if (i + 1 == n || nArr[i + 1][j] != 0) { j--; checkIdx++; }
else { i++; }
}
else if (checkIdx % 4 == 2) { //왼쪽으로
if (j - 1 == -1 || nArr[i][j - 1] != 0) { i--; checkIdx++; }
else { j--; }
}
else if (checkIdx % 4 == 3) { //위쪽으로
if (i - 1 == -1 || nArr[i - 1][j] != 0) { j++; checkIdx++; }
else { i--; }
}
}
for (int a = 0; a < n; a++) {
for (int b = 0; b < n; b++) {
cout<< setw(5) << nArr[a][b];
}
cout << endl;
}
return 0;
}
'알고리즘' 카테고리의 다른 글
BFS, DFS 알고리즘 (0) | 2022.01.31 |
---|---|
소수를 빠르게 찾는 방법을 알아보자! (0) | 2021.11.14 |