Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

RandomWalk2/조현태: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0003 pages from live compare)
 
Line 23: Line 23:
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  {
  {
  if (0 == target[i][j])
  if (0 == target[i][j])
  return true;
  return true;
  }
  }
Line 38: Line 38:
  cout << "input world size \n>>";
  cout << "input world size \n>>";
  cin >> worldSizeX >> worldSizeY;
  cin >> worldSizeX >> worldSizeY;
  myWorld = new int*[worldSizeX];
  myWorld = new int*[worldSizeX];
  for (register int i = 0; i < worldSizeX; ++i)
  for (register int i = 0; i < worldSizeX; ++i)
  {
  {
  myWorld[i] = new int[worldSizeY];
  myWorld[i] = new int[worldSizeY];
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  myWorld[i][j] = 0;
  myWorld[i][j] = 0;
  }
  }
  //// 시작점 설정 ////
  //// 시작점 설정 ////
Line 60: Line 60:
  //// 이동 처리 ////
  //// 이동 처리 ////
  const int MOVE_TYPE = 8;
  const int MOVE_TYPE = 8;
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  int moveNum = 0;
  int moveNum = 0;
  myWorld[myPointX][myPointY] = MOVED_POINT;
  myWorld[myPointX][myPointY] = MOVED_POINT;
  for (register int i = 0; i < strlen(moveRotate.c_str()); ++i)
  for (register int i = 0; i < strlen(moveRotate.c_str()); ++i)
  {
  {
  myPointX += ADD_X[moveRotate[i] - '0'];
  myPointX += ADD_X[moveRotate[i] - '0'];
  myPointY += ADD_Y[moveRotate[i] - '0'];
  myPointY += ADD_Y[moveRotate[i] - '0'];
  ++moveNum;
  ++moveNum;
  myWorld[myPointX][myPointY] = MOVED_POINT;
  myWorld[myPointX][myPointY] = MOVED_POINT;
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  break;
  break;
Line 78: Line 78:
  for (register int j = 0; j < worldSizeX; ++j)
  for (register int j = 0; j < worldSizeX; ++j)
  {
  {
  cout << myWorld[j][i];
  cout << myWorld[j][i];
  }
  }
  cout << endl;
  cout << endl;
Line 100: Line 100:
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  {
  {
  if (0 == target[i][j])
  if (0 == target[i][j])
  return true;
  return true;
  }
  }
Line 115: Line 115:
  cout << "input world size \n>>";
  cout << "input world size \n>>";
  cin >> worldSizeX >> worldSizeY;
  cin >> worldSizeX >> worldSizeY;
  myWorld = new int*[worldSizeX];
  myWorld = new int*[worldSizeX];
  for (register int i = 0; i < worldSizeX; ++i)
  for (register int i = 0; i < worldSizeX; ++i)
  {
  {
  myWorld[i] = new int[worldSizeY];
  myWorld[i] = new int[worldSizeY];
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  myWorld[i][j] = 0;
  myWorld[i][j] = 0;
  }
  }
  //// 시작점 설정 ////
  //// 시작점 설정 ////
  string moveRotate[NUMBER_PLAYER];
  string moveRotate[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  {
  {
  cout << "input start point \n>>";
  cout << "input start point \n>>";
  cin >> myPointX[i] >> myPointY[i];
  cin >> myPointX[i] >> myPointY[i];
  //// 이동경로 입력 ////
  //// 이동경로 입력 ////
  cout << "input move rotate\n>>";
  cout << "input move rotate\n>>";
  cin >> moveRotate[i];
  cin >> moveRotate[i];
  }
  }
  //// 종료 메시지 입력 ////
  //// 종료 메시지 입력 ////
Line 140: Line 140:
  //// 이동 처리 ////
  //// 이동 처리 ////
  const int MOVE_TYPE = 8;
  const int MOVE_TYPE = 8;
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  int moveNum[NUMBER_PLAYER] = {0,};
  int moveNum[NUMBER_PLAYER] = {0,};
  for (register int i = 0; i < NUMBER_PLAYER; ++i)
  for (register int i = 0; i < NUMBER_PLAYER; ++i)
  myWorld[myPointX[i]][myPointY[i]] = MOVED_POINT;
  myWorld[myPointX[i]][myPointY[i]] = MOVED_POINT;
 
 
  bool isChanged = true;
  bool isChanged = true;
Line 152: Line 152:
  for (register int j = 0; j < NUMBER_PLAYER; ++j)
  for (register int j = 0; j < NUMBER_PLAYER; ++j)
  {
  {
  if (i < strlen(moveRotate[j].c_str()))
  if (i < strlen(moveRotate[j].c_str()))
  {
  {
  isChanged = true;
  isChanged = true;
  myPointX[j] += ADD_X[moveRotate[j][i] - '0'];
  myPointX[j] += ADD_X[moveRotate[j][i] - '0'];
  myPointY[j] += ADD_Y[moveRotate[j][i] - '0'];
  myPointY[j] += ADD_Y[moveRotate[j][i] - '0'];
  ++moveNum[j];
  ++moveNum[j];
  myWorld[myPointX[j]][myPointY[j]] = MOVED_POINT;
  myWorld[myPointX[j]][myPointY[j]] = MOVED_POINT;
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  break;
  break;
Line 165: Line 165:
  }
  }
  for (register int i = 0; i < NUMBER_PLAYER; ++i)
  for (register int i = 0; i < NUMBER_PLAYER; ++i)
  cout << moveNum[i] << endl;
  cout << moveNum[i] << endl;
  for (register int i = 0; i < worldSizeY; ++i)
  for (register int i = 0; i < worldSizeY; ++i)
  {
  {
  for (register int j = 0; j < worldSizeX; ++j)
  for (register int j = 0; j < worldSizeX; ++j)
  {
  {
  cout << myWorld[j][i];
  cout << myWorld[j][i];
  }
  }
  cout << endl;
  cout << endl;
Line 192: Line 192:
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  {
  {
  if (0 == target[i][j])
  if (0 == target[i][j])
  return true;
  return true;
  }
  }
Line 208: Line 208:
  cout << "input world size \n>>";
  cout << "input world size \n>>";
  cin >> worldSizeX >> worldSizeY;
  cin >> worldSizeX >> worldSizeY;
  myWorld = new int*[worldSizeX];
  myWorld = new int*[worldSizeX];
  for (register int i = 0; i < worldSizeX; ++i)
  for (register int i = 0; i < worldSizeX; ++i)
  {
  {
  myWorld[i] = new int[worldSizeY];
  myWorld[i] = new int[worldSizeY];
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  myWorld[i][j] = 0;
  myWorld[i][j] = 0;
  }
  }
  //// 시작점 설정 ////
  //// 시작점 설정 ////
  string moveRotate[NUMBER_PLAYER];
  string moveRotate[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  {
  {
  cout << "input start point \n>>";
  cout << "input start point \n>>";
  cin >> myPointX[i];
  cin >> myPointX[i];
  if (END_NUMBER == myPointX[i])
  if (END_NUMBER == myPointX[i])
  break;
  break;
  cin >> myPointY[i];
  cin >> myPointY[i];
  ++numberPlayer;
  ++numberPlayer;
  //// 이동경로 입력 ////
  //// 이동경로 입력 ////
  cout << "input move rotate\n>>";
  cout << "input move rotate\n>>";
  cin >> moveRotate[i];
  cin >> moveRotate[i];
  }
  }
  //// 이동 처리 ////
  //// 이동 처리 ////
  const int MOVE_TYPE = 8;
  const int MOVE_TYPE = 8;
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  int moveNum[NUMBER_PLAYER] = {0,};
  int moveNum[NUMBER_PLAYER] = {0,};
  for (register int i = 0; i < numberPlayer; ++i)
  for (register int i = 0; i < numberPlayer; ++i)
  ++myWorld[myPointX[i]][myPointY[i]];
  ++myWorld[myPointX[i]][myPointY[i]];
 
 
  bool isChanged = true;
  bool isChanged = true;
Line 245: Line 245:
  for (register int j = 0; j < numberPlayer; ++j)
  for (register int j = 0; j < numberPlayer; ++j)
  {
  {
  if (i < strlen(moveRotate[j].c_str()))
  if (i < strlen(moveRotate[j].c_str()))
  {
  {
  isChanged = true;
  isChanged = true;
  myPointX[j] += ADD_X[moveRotate[j][i] - '0'];
  myPointX[j] += ADD_X[moveRotate[j][i] - '0'];
  myPointY[j] += ADD_Y[moveRotate[j][i] - '0'];
  myPointY[j] += ADD_Y[moveRotate[j][i] - '0'];
  ++moveNum[j];
  ++moveNum[j];
  ++myWorld[myPointX[j]][myPointY[j]];
  ++myWorld[myPointX[j]][myPointY[j]];
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  break;
  break;
Line 258: Line 258:
  }
  }
  for (register int i = 0; i < numberPlayer; ++i)
  for (register int i = 0; i < numberPlayer; ++i)
  cout << moveNum[i] << endl;
  cout << moveNum[i] << endl;
  for (register int i = 0; i < worldSizeY; ++i)
  for (register int i = 0; i < worldSizeY; ++i)
  {
  {
  for (register int j = 0; j < worldSizeX; ++j)
  for (register int j = 0; j < worldSizeX; ++j)
  {
  {
  cout << myWorld[j][i];
  cout << myWorld[j][i];
  }
  }
  cout << endl;
  cout << endl;
Line 285: Line 285:
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  {
  {
  if (0 == target[i][j])
  if (0 == target[i][j])
  return true;
  return true;
  }
  }
Line 301: Line 301:
  cout << "input world size \n>>";
  cout << "input world size \n>>";
  cin >> worldSizeX >> worldSizeY;
  cin >> worldSizeX >> worldSizeY;
  myWorld = new int*[worldSizeX];
  myWorld = new int*[worldSizeX];
  for (register int i = 0; i < worldSizeX; ++i)
  for (register int i = 0; i < worldSizeX; ++i)
  {
  {
  myWorld[i] = new int[worldSizeY];
  myWorld[i] = new int[worldSizeY];
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  myWorld[i][j] = 0;
  myWorld[i][j] = 0;
  }
  }
  //// 시작점 설정 ////
  //// 시작점 설정 ////
  string moveRotate[NUMBER_PLAYER];
  string moveRotate[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  int movePoint[NUMBER_PLAYER];
  int movePoint[NUMBER_PLAYER];
  char selectType;
  char selectType;
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  {
  {
  cout << "input start point and Type\n>>";
  cout << "input start point and Type\n>>";
  cin >> myPointX[i];
  cin >> myPointX[i];
  if (END_NUMBER == myPointX[i])
  if (END_NUMBER == myPointX[i])
  break;
  break;
  cin >> myPointY[i] >> selectType;
  cin >> myPointY[i] >> selectType;
  ++numberPlayer;
  ++numberPlayer;
  //// 이동경로 입력 ////
  //// 이동경로 입력 ////
  cout << "input move rotate\n>>";
  cout << "input move rotate\n>>";
  cin >> moveRotate[i];
  cin >> moveRotate[i];
  if ('S' == selectType)
  if ('S' == selectType)
  movePoint[i] = 2;
  movePoint[i] = 2;
  else
  else
  movePoint[i] = 1;
  movePoint[i] = 1;
  }
  }
  //// 이동 처리 ////
  //// 이동 처리 ////
  const int MOVE_TYPE = 8;
  const int MOVE_TYPE = 8;
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
  int moveNum[NUMBER_PLAYER] = {0,};
  int moveNum[NUMBER_PLAYER] = {0,};
  for (register int i = 0; i < numberPlayer; ++i)
  for (register int i = 0; i < numberPlayer; ++i)
  ++myWorld[myPointX[i]][myPointY[i]];
  ++myWorld[myPointX[i]][myPointY[i]];
 
 
  bool isChanged = true;
  bool isChanged = true;
Line 344: Line 344:
  for (register int j = 0; j < numberPlayer; ++j)
  for (register int j = 0; j < numberPlayer; ++j)
  {
  {
  for (register int k = 0; k < movePoint[j]; ++k)
  for (register int k = 0; k < movePoint[j]; ++k)
  {
  {
  if (i * movePoint[j] + k >= strlen(moveRotate[j].c_str()))
  if (i * movePoint[j] + k >= strlen(moveRotate[j].c_str()))
  break;
  break;
  isChanged = true;
  isChanged = true;
  myPointX[j] += ADD_X[moveRotate[j][i * movePoint[j] + k] - '0'];
  myPointX[j] += ADD_X[moveRotate[j][i * movePoint[j] + k] - '0'];
  myPointY[j] += ADD_Y[moveRotate[j][i * movePoint[j] + k] - '0'];
  myPointY[j] += ADD_Y[moveRotate[j][i * movePoint[j] + k] - '0'];
  ++moveNum[j];
  ++moveNum[j];
  ++myWorld[myPointX[j]][myPointY[j]];
  ++myWorld[myPointX[j]][myPointY[j]];
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  break;
  break;
Line 359: Line 359:
  }
  }
  for (register int i = 0; i < numberPlayer; ++i)
  for (register int i = 0; i < numberPlayer; ++i)
  cout << moveNum[i] << endl;
  cout << moveNum[i] << endl;
  for (register int i = 0; i < worldSizeY; ++i)
  for (register int i = 0; i < worldSizeY; ++i)
  {
  {
  for (register int j = 0; j < worldSizeX; ++j)
  for (register int j = 0; j < worldSizeX; ++j)
  {
  {
  cout << myWorld[j][i];
  cout << myWorld[j][i];
  }
  }
  cout << endl;
  cout << endl;
Line 390: Line 390:
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  {
  {
  if (0 == target[i][j])
  if (0 == target[i][j])
  return true;
  return true;
  }
  }
Line 408: Line 408:
  cout << "input world size \n>>";
  cout << "input world size \n>>";
  cin >> worldSizeX >> worldSizeY;
  cin >> worldSizeX >> worldSizeY;
  myWorld = new int*[worldSizeX];
  myWorld = new int*[worldSizeX];
  for (register int i = 0; i < worldSizeX; ++i)
  for (register int i = 0; i < worldSizeX; ++i)
  {
  {
  myWorld[i] = new int[worldSizeY];
  myWorld[i] = new int[worldSizeY];
  for (register int j = 0; j < worldSizeY; ++j)
  for (register int j = 0; j < worldSizeY; ++j)
  myWorld[i][j] = 0;
  myWorld[i][j] = 0;
  }
  }
  //// 음식 초기화 ////
  //// 음식 초기화 ////
Line 426: Line 426:
  break;
  break;
  cin >> foodY;
  cin >> foodY;
  foodDatas[foodX * worldSizeY + foodY] = true;
  foodDatas[foodX * worldSizeY + foodY] = true;
  }
  }
  //// 시작점 설정 ////
  //// 시작점 설정 ////
  string moveRotate[NUMBER_PLAYER];
  string moveRotate[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointX[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  int myPointY[NUMBER_PLAYER];
  int moveType[NUMBER_PLAYER];
  int moveType[NUMBER_PLAYER];
  char selectType;
  char selectType;
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  for (int i = 0; i < NUMBER_PLAYER; ++i)
  {
  {
  cout << "input start point and Type\n>>";
  cout << "input start point and Type\n>>";
  cin >> myPointX[i];
  cin >> myPointX[i];
  if (END_NUMBER == myPointX[i])
  if (END_NUMBER == myPointX[i])
  break;
  break;
  cin >> myPointY[i] >> selectType;
  cin >> myPointY[i] >> selectType;
  ++numberPlayer;
  ++numberPlayer;
  //// 이동경로 입력 ////
  //// 이동경로 입력 ////
  cout << "input move rotate\n>>";
  cout << "input move rotate\n>>";
  cin >> moveRotate[i];
  cin >> moveRotate[i];
  if ('S' == selectType)
  if ('S' == selectType)
  moveType[i] = -1;
  moveType[i] = -1;
  else
  else
  moveType[i] = 0;
  moveType[i] = 0;
  }
  }
  //// 이동 처리 ////
  //// 이동 처리 ////
  const int MOVE_TYPE = 9;
  const int MOVE_TYPE = 9;
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1, 0};
  const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1, 0};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1, 0};
  const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1, 0};
  int moveNum[NUMBER_PLAYER] = {0,};
  int moveNum[NUMBER_PLAYER] = {0,};
  for (register int i = 0; i < numberPlayer; ++i)
  for (register int i = 0; i < numberPlayer; ++i)
  ++myWorld[myPointX[i]][myPointY[i]];
  ++myWorld[myPointX[i]][myPointY[i]];
 
 
  bool isChanged = true;
  bool isChanged = true;
Line 465: Line 465:
  {
  {
  int moveDelay = 1;
  int moveDelay = 1;
  if (0 != moveType[j])
  if (0 != moveType[j])
  {
  {
  moveDelay = 2;
  moveDelay = 2;
  if (moveType[j] > 0)
  if (moveType[j] > 0)
  --moveType[j];
  --moveType[j];
  }
  }
  for (register int k = 0; k < moveDelay; ++k)
  for (register int k = 0; k < moveDelay; ++k)
  {
  {
  if (i * moveDelay + k >= strlen(moveRotate[j].c_str()))
  if (i * moveDelay + k >= strlen(moveRotate[j].c_str()))
  break;
  break;
  isChanged = true;
  isChanged = true;
  int oder = moveRotate[j][i * moveDelay + k] - '0';
  int oder = moveRotate[j][i * moveDelay + k] - '0';
  myPointX[j] += ADD_X[oder];
  myPointX[j] += ADD_X[oder];
  myPointY[j] += ADD_Y[oder];
  myPointY[j] += ADD_Y[oder];
  if (SLEEP != oder)
  if (SLEEP != oder)
  {
  {
  ++moveNum[j];
  ++moveNum[j];
  ++myWorld[myPointX[j]][myPointY[j]];
  ++myWorld[myPointX[j]][myPointY[j]];
  }
  }
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
  if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
Line 492: Line 492:
  for (register int k = 0; k < numberPlayer; ++k)
  for (register int k = 0; k < numberPlayer; ++k)
  {
  {
  if (foodDatas[myPointX[k] * worldSizeY + myPointY[k]] && moveType[k] == j)
  if (foodDatas[myPointX[k] * worldSizeY + myPointY[k]] && moveType[k] == j)
  {
  {
  foodDatas[myPointX[k] * worldSizeY + myPointY[k]] = false;
  foodDatas[myPointX[k] * worldSizeY + myPointY[k]] = false;
  if (-1 != moveType[k])
  if (-1 != moveType[k])
  moveType[k] = POWER_DELAY;
  moveType[k] = POWER_DELAY;
  }
  }
  }
  }
Line 506: Line 506:
  }
  }
  for (register int i = 0; i < numberPlayer; ++i)
  for (register int i = 0; i < numberPlayer; ++i)
  cout << moveNum[i] << endl;
  cout << moveNum[i] << endl;
  for (register int i = 0; i < worldSizeY; ++i)
  for (register int i = 0; i < worldSizeY; ++i)
  {
  {
  for (register int j = 0; j < worldSizeX; ++j)
  for (register int j = 0; j < worldSizeX; ++j)
  {
  {
  cout << myWorld[j][i];
  cout << myWorld[j][i];
  }
  }
  cout << endl;
  cout << endl;

Latest revision as of 00:29, 27 March 2026

== 설명 ==
 VI넘흐 빡생..ㅠ.ㅜ

항상 루프문에선 register 키워드를 즐겨쓰는군 ㅋㅋ - 도현

ㅎㅎ 리눅스라고 봐주진 않아요.ㅎㅎ - 조현태
== 느낀점 ==
    • 역시 끝차 대장이 젤루 쎄다아..;;;ㅁ;;;
    • 익숙치 않은 환경탓에 디자인이 좀더 나빠진듯..ㅎㅎㅎ 대충 때웠지만 나름대로 잘 된듯 하다.ㅋ (아닌가?ㅎㅎ)
    • 구조체를 썼으면 나아졌을 뻔 했지만.. 요구사항이 늘어났을때 만들었어야 했는데.. vi가 익숙치 않아 많이 수정하는쪽은 되도록 피했다는..ㅋㅋ
== 1차 버전 ==
#include <iostream>
#include <string>

using namespace std;

#define MOVED_POINT 1

bool IsHaveZero(int worldSizeX, int worldSizeY, int** target)
{

	for (register int i = 0; i < worldSizeX; ++i)
	{
		for (register int j = 0; j < worldSizeY; ++j)
		{
			if (0 == target[i][j])
				return true;
		}
	}
	return false;
}

int main()
{
	int** myWorld;
	int worldSizeX = 0;
	int worldSizeY = 0;
	//// 월드 초기화 ////
	cout << "input world size \n>>";
	cin >> worldSizeX >> worldSizeY;
	myWorld = new int*[worldSizeX];
	for (register int i = 0; i < worldSizeX; ++i)
	{
		myWorld[i] = new int[worldSizeY];
		for (register int j = 0; j < worldSizeY; ++j)
			myWorld[i][j] = 0;
	}
	//// 시작점 설정 ////
	int myPointX = 0;
	int myPointY = 0;
	cout << "input start point \n>>";
	cin >> myPointX >> myPointY;
	//// 이동경로 입력 ////
	string moveRotate;
	cout << "input move rotate\n>>";
	cin >> moveRotate;
	//// 종료 메시지 입력 ////
	cout << "input End Num 999\n>>";
	int endNum;
	cin >> endNum;
	//// 이동 처리 ////
	const int MOVE_TYPE = 8;
	const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
	const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
	int moveNum = 0;
	myWorld[myPointX][myPointY] = MOVED_POINT;
	for (register int i = 0; i < strlen(moveRotate.c_str()); ++i)
	{
		myPointX += ADD_X[moveRotate[i] - '0'];
		myPointY += ADD_Y[moveRotate[i] - '0'];
		++moveNum;
		myWorld[myPointX][myPointY] = MOVED_POINT;
		if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
			break;
	}
	cout << moveNum << endl;
	for (register int i = 0; i < worldSizeY; ++i)
	{
		for (register int j = 0; j < worldSizeX; ++j)
		{
			cout << myWorld[j][i];
		}
		cout << endl;
	}
	return 0;
}
== 2차 버전 ==
#include <iostream>
#include <string>

using namespace std;

#define MOVED_POINT 1
#define NUMBER_PLAYER 2

bool IsHaveZero(int worldSizeX, int worldSizeY, int** target)
{

	for (register int i = 0; i < worldSizeX; ++i)
	{
		for (register int j = 0; j < worldSizeY; ++j)
		{
			if (0 == target[i][j])
				return true;
		}
	}
	return false;
}

int main()
{
	int** myWorld;
	int worldSizeX = 0;
	int worldSizeY = 0;
	//// 월드 초기화 ////
	cout << "input world size \n>>";
	cin >> worldSizeX >> worldSizeY;
	myWorld = new int*[worldSizeX];
	for (register int i = 0; i < worldSizeX; ++i)
	{
		myWorld[i] = new int[worldSizeY];
		for (register int j = 0; j < worldSizeY; ++j)
			myWorld[i][j] = 0;
	}
	//// 시작점 설정 ////
	string moveRotate[NUMBER_PLAYER];
	int myPointX[NUMBER_PLAYER];
	int myPointY[NUMBER_PLAYER];
	for (int i = 0; i < NUMBER_PLAYER; ++i)
	{
		cout << "input start point \n>>";
		cin >> myPointX[i] >> myPointY[i];
		//// 이동경로 입력 ////
		cout << "input move rotate\n>>";
		cin >> moveRotate[i];
	}
	//// 종료 메시지 입력 ////
	cout << "input End Num 999\n>>";
	int endNum;
	cin >> endNum;
	//// 이동 처리 ////
	const int MOVE_TYPE = 8;
	const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
	const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
	int moveNum[NUMBER_PLAYER] = {0,};
	for (register int i = 0; i < NUMBER_PLAYER; ++i)
		myWorld[myPointX[i]][myPointY[i]] = MOVED_POINT;
	
	bool isChanged = true;
	for (register int i = 0; isChanged; ++i)
	{
		isChanged = false;
		for (register int j = 0; j < NUMBER_PLAYER; ++j)
		{
			if (i < strlen(moveRotate[j].c_str()))
			{
				isChanged = true;
				myPointX[j] += ADD_X[moveRotate[j][i] - '0'];
				myPointY[j] += ADD_Y[moveRotate[j][i] - '0'];
				++moveNum[j];
				myWorld[myPointX[j]][myPointY[j]] = MOVED_POINT;
				if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
					break;
			}
		}
	}
	for (register int i = 0; i < NUMBER_PLAYER; ++i)
		cout << moveNum[i] << endl;
	for (register int i = 0; i < worldSizeY; ++i)
	{
		for (register int j = 0; j < worldSizeX; ++j)
		{
			cout << myWorld[j][i];
		}
		cout << endl;
	}
	return 0;
}
== 3차 버전 ==
#include <iostream>
#include <string>

using namespace std;

#define NUMBER_PLAYER 999
#define END_NUMBER 999

bool IsHaveZero(int worldSizeX, int worldSizeY, int** target)
{

	for (register int i = 0; i < worldSizeX; ++i)
	{
		for (register int j = 0; j < worldSizeY; ++j)
		{
			if (0 == target[i][j])
				return true;
		}
	}
	return false;
}

int main()
{
	int numberPlayer = 0;
	int** myWorld;
	int worldSizeX = 0;
	int worldSizeY = 0;
	//// 월드 초기화 ////
	cout << "input world size \n>>";
	cin >> worldSizeX >> worldSizeY;
	myWorld = new int*[worldSizeX];
	for (register int i = 0; i < worldSizeX; ++i)
	{
		myWorld[i] = new int[worldSizeY];
		for (register int j = 0; j < worldSizeY; ++j)
			myWorld[i][j] = 0;
	}
	//// 시작점 설정 ////
	string moveRotate[NUMBER_PLAYER];
	int myPointX[NUMBER_PLAYER];
	int myPointY[NUMBER_PLAYER];
	for (int i = 0; i < NUMBER_PLAYER; ++i)
	{
		cout << "input start point \n>>";
		cin >> myPointX[i];
		if (END_NUMBER == myPointX[i])
			break;
		cin >> myPointY[i];
		++numberPlayer;
		//// 이동경로 입력 ////
		cout << "input move rotate\n>>";
		cin >> moveRotate[i];
	}
	//// 이동 처리 ////
	const int MOVE_TYPE = 8;
	const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
	const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
	int moveNum[NUMBER_PLAYER] = {0,};
	for (register int i = 0; i < numberPlayer; ++i)
		++myWorld[myPointX[i]][myPointY[i]];
	
	bool isChanged = true;
	for (register int i = 0; isChanged; ++i)
	{
		isChanged = false;
		for (register int j = 0; j < numberPlayer; ++j)
		{
			if (i < strlen(moveRotate[j].c_str()))
			{
				isChanged = true;
				myPointX[j] += ADD_X[moveRotate[j][i] - '0'];
				myPointY[j] += ADD_Y[moveRotate[j][i] - '0'];
				++moveNum[j];
				++myWorld[myPointX[j]][myPointY[j]];
				if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
					break;
			}
		}
	}
	for (register int i = 0; i < numberPlayer; ++i)
		cout << moveNum[i] << endl;
	for (register int i = 0; i < worldSizeY; ++i)
	{
		for (register int j = 0; j < worldSizeX; ++j)
		{
			cout << myWorld[j][i];
		}
		cout << endl;
	}
	return 0;
}
== 4차버전 ==
#include <iostream>
#include <string>

using namespace std;

#define NUMBER_PLAYER 101
#define END_NUMBER 999

bool IsHaveZero(int worldSizeX, int worldSizeY, int** target)
{

	for (register int i = 0; i < worldSizeX; ++i)
	{
		for (register int j = 0; j < worldSizeY; ++j)
		{
			if (0 == target[i][j])
				return true;
		}
	}
	return false;
}

int main()
{
	int numberPlayer = 0;
	int** myWorld;
	int worldSizeX = 0;
	int worldSizeY = 0;
	//// 월드 초기화 ////
	cout << "input world size \n>>";
	cin >> worldSizeX >> worldSizeY;
	myWorld = new int*[worldSizeX];
	for (register int i = 0; i < worldSizeX; ++i)
	{
		myWorld[i] = new int[worldSizeY];
		for (register int j = 0; j < worldSizeY; ++j)
			myWorld[i][j] = 0;
	}
	//// 시작점 설정 ////
	string moveRotate[NUMBER_PLAYER];
	int myPointX[NUMBER_PLAYER];
	int myPointY[NUMBER_PLAYER];
	int movePoint[NUMBER_PLAYER];
	char selectType;
	for (int i = 0; i < NUMBER_PLAYER; ++i)
	{
		cout << "input start point and Type\n>>";
		cin >> myPointX[i];
		if (END_NUMBER == myPointX[i])
			break;
		cin >> myPointY[i] >> selectType;
		++numberPlayer;
		//// 이동경로 입력 ////
		cout << "input move rotate\n>>";
		cin >> moveRotate[i];
		if ('S' == selectType)
			movePoint[i] = 2;
		else
			movePoint[i] = 1;
	}
	//// 이동 처리 ////
	const int MOVE_TYPE = 8;
	const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1};
	const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1};
	int moveNum[NUMBER_PLAYER] = {0,};
	for (register int i = 0; i < numberPlayer; ++i)
		++myWorld[myPointX[i]][myPointY[i]];
	
	bool isChanged = true;
	for (register int i = 0; isChanged; ++i)
	{
		isChanged = false;
		for (register int j = 0; j < numberPlayer; ++j)
		{
			for (register int k = 0; k < movePoint[j]; ++k)
			{
				if (i * movePoint[j] + k >= strlen(moveRotate[j].c_str()))
					break;
				isChanged = true;
				myPointX[j] += ADD_X[moveRotate[j][i * movePoint[j] + k] - '0'];
				myPointY[j] += ADD_Y[moveRotate[j][i * movePoint[j] + k] - '0'];
				++moveNum[j];
				++myWorld[myPointX[j]][myPointY[j]];
				if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
					break;
			}
		}
	}
	for (register int i = 0; i < numberPlayer; ++i)
		cout << moveNum[i] << endl;
	for (register int i = 0; i < worldSizeY; ++i)
	{
		for (register int j = 0; j < worldSizeX; ++j)
		{
			cout << myWorld[j][i];
		}
		cout << endl;
	}
	return 0;
}
== 5차 버전 ==
#include <iostream>
#include <string>
#include <map>

using namespace std;

#define NUMBER_PLAYER 101
#define END_NUMBER 999
#define POWER_DELAY 5
#define SLEEP 8
#define NUMBER_OF_TYPE 3

bool IsHaveZero(int worldSizeX, int worldSizeY, int** target)
{

	for (register int i = 0; i < worldSizeX; ++i)
	{
		for (register int j = 0; j < worldSizeY; ++j)
		{
			if (0 == target[i][j])
				return true;
		}
	}
	return false;
}


int main()
{
	int numberPlayer = 0;
	int** myWorld;
	int worldSizeX = 0;
	int worldSizeY = 0;
	map<int, bool> foodDatas;
	//// 월드 초기화 ////
	cout << "input world size \n>>";
	cin >> worldSizeX >> worldSizeY;
	myWorld = new int*[worldSizeX];
	for (register int i = 0; i < worldSizeX; ++i)
	{
		myWorld[i] = new int[worldSizeY];
		for (register int j = 0; j < worldSizeY; ++j)
			myWorld[i][j] = 0;
	}
	//// 음식 초기화 ////
	cout << "input food point (-1 is Exit)\n";
	int foodX;
	int foodY;
	while(1)
	{
		cout << ">>";
		cin >> foodX;
		if (-1 == foodX)
			break;
		cin >> foodY;
		foodDatas[foodX * worldSizeY + foodY] = true;
	}
	//// 시작점 설정 ////
	string moveRotate[NUMBER_PLAYER];
	int myPointX[NUMBER_PLAYER];
	int myPointY[NUMBER_PLAYER];
	int moveType[NUMBER_PLAYER];
	char selectType;
	for (int i = 0; i < NUMBER_PLAYER; ++i)
	{
		cout << "input start point and Type\n>>";
		cin >> myPointX[i];
		if (END_NUMBER == myPointX[i])
			break;
		cin >> myPointY[i] >> selectType;
		++numberPlayer;
		//// 이동경로 입력 ////
		cout << "input move rotate\n>>";
		cin >> moveRotate[i];
		if ('S' == selectType)
			moveType[i] = -1;
		else
			moveType[i] = 0;
	}
	//// 이동 처리 ////
	const int MOVE_TYPE = 9;
	const int ADD_X[MOVE_TYPE] = {0, 1, 1, 1, 0, -1, -1, -1, 0};
	const int ADD_Y[MOVE_TYPE] = {-1, -1, 0, 1, 1, 1, 0, -1, 0};
	int moveNum[NUMBER_PLAYER] = {0,};
	for (register int i = 0; i < numberPlayer; ++i)
		++myWorld[myPointX[i]][myPointY[i]];
	
	bool isChanged = true;
	for (register int i = 0; isChanged; ++i)
	{
		isChanged = false;
		for (register int j = 0; j < numberPlayer; ++j)
		{
			int moveDelay = 1;
			if (0 != moveType[j])
			{
				moveDelay = 2;
				if (moveType[j] > 0)
					--moveType[j];
			}
			for (register int k = 0; k < moveDelay; ++k)
			{
				if (i * moveDelay + k >= strlen(moveRotate[j].c_str()))
					break;
				isChanged = true;
				int oder = moveRotate[j][i * moveDelay + k] - '0';
				myPointX[j] += ADD_X[oder];
				myPointY[j] += ADD_Y[oder];
				if (SLEEP != oder)
				{
					++moveNum[j];
					++myWorld[myPointX[j]][myPointY[j]];
				}
				if (false == IsHaveZero(worldSizeX, worldSizeY, myWorld))
					break;
			}
		}
		for (register int j = 0; ; ++j)
		{
			for (register int k = 0; k < numberPlayer; ++k)
			{
				if (foodDatas[myPointX[k] * worldSizeY + myPointY[k]] && moveType[k] == j)
				{
					foodDatas[myPointX[k] * worldSizeY + myPointY[k]] = false;
					if (-1 != moveType[k])
						moveType[k] = POWER_DELAY;
				}
			}
			if (POWER_DELAY == j)
				j = -2;
			else if (-1 == j)
				break;
		}
	}
	for (register int i = 0; i < numberPlayer; ++i)
		cout << moveNum[i] << endl;
	for (register int i = 0; i < worldSizeY; ++i)
	{
		for (register int j = 0; j < worldSizeX; ++j)
		{
			cout << myWorld[j][i];
		}
		cout << endl;
	}
	return 0;
}

RandomWalk2