# Random Walk2/상규

### 프로그램 소스 ¶

```~cpp
#include <iostream>
#include <cstring>
using namespace std;

#define MAX_JOURNEY 1024	// 최대 여정 수

int walk(int m, int n, int starti, int startj, char journey[MAX_JOURNEY], int **board);

// 메인 함수
void main()
{
// 입력 데이터
int m, n;
int starti, startj;
char journey[MAX_JOURNEY];

// 입력
cout << "Input :\n";
cin >> m >> n;
cin >> starti >> startj;

// 여정 입력
char buffer[MAX_JOURNEY];
int offset=0;
for(;;)
{
cin.getline(buffer,MAX_JOURNEY);
if(strcmp(buffer,"999")==0)
break;

strcpy(&journey[offset],buffer);
offset+=strlen(buffer);
}

// 출력 데이터
int count;
int **board=new int*[m];
for(int i=0;i<m;i++)
{
board[i]=new int[n];

for(int j=0;j<n;j++)
board[i][j]=0;
}

// Walk
count=walk(m,n,starti,startj,journey,board);

// 출력
cout << "Output :\n";
cout << count << endl;
for(i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout << board[i][j] << " ";
cout << endl;
}

for(i=0;i<m;i++)
delete[] board[i];
delete[] board;
}

// Walk 하는 함수
int walk(int m, int n, int starti, int startj, char journey[MAX_JOURNEY], int **board)
{
int move[8][2]={ { -1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 },
{ 1, 0 }, { 1, -1 }, { 0, -1 }, { -1, -1 } };

int count=0;
board[starti][startj]=1;

int currenti=starti, currentj=startj;
int journeycount=0;
for(;;)
{
// 종료 조건 검사
bool quit=true;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(board[i][j]==0)
quit=false;
}
if(quit==false)
break;
}
if(quit==true || journey[journeycount]=='\0')
break;

// Walk
currenti+=move[journey[journeycount]-'0'][0];
currentj+=move[journey[journeycount]-'0'][1];
journeycount++;

if(currenti==-1) currenti=m-1;
if(currenti==m) currenti=0;
if(currentj==-1) currentj=n-1;
if(currentj==n) currentj=0;

board[currenti][currentj]++;
count++;
}

return count;
}
```