프로그래밍(c++)/인프런 강의 정리(C++)
강의 내용 정리(Section3_8/달팽이 문제)
정체불명의 모모
2024. 5. 17. 13:56
강의 중 배운 내용과 추가적으로 배워야 할 부분들을 정리한 메모장 입니다.
강의 : (인프런) 게임 프로그래머 입문 올인원
◇ 달팽이 문제 코드
#include <iostream>
#include <iomanip>
using namespace std;
const int MAX = 100;
int board[MAX][MAX];
int N;
enum DIR
{
RIGHT = 0,
DOWN = 1,
LEFT= 2,
UP = 3,
};
void printBoard()
{
for(int y = 0; y < N ; y++)
{
for(int x = 0; x < N ; x++)
{
// setfill , setw 표현 형식(0을 2개로 나오게 표현)
cout << setfill('0') << setw(2) << board[y][x] << " ";
}
cout << endl;
}
}
bool CanGo(int y , int x)
{
if(y < 0 || y >= N)
return false;
if(x < 0 || x >= N)
return false;
if(board[y][x] != 0)
return false;
return true;
}
void SetBoard2()
{
int dir = RIGHT;
int num = 1;
int y = 0;
int x = 0;
// 방향에 따른 값 변경
int dy[] = {0,1,0,-1}; // RIGHT , DOWN , LEFT , UP 일 경우 값의 변경
int dx[] = {1,0,-1,0};
while(true)
{
board[y][x] = num;
// 빠져나가는 조건부
if(num == N*N)
break;
int nextY = y + dy[dir];
int nextX = x + dx[dir];
if(CanGo(nextY, nextX))
{
y = nextY;
x = nextX;
num++;
}
else
{ // 방향 enum 값
dir = (dir + 1) % 4;
}
}
}
int main()
{
cin >> N;
SetBoard();
printBoard();
}
나중에 참조하기 좋을 듯한 코드여서 따로 포스팅 하였습니다.