プログラマ-アクセス長(Lv 2)



私はこの問題のコードを間違えた.
#include
#include
using namespace std;
int solution(string dirs) {
	int answer = 0;
	int x = 5;
	int y = 5;
	int idir[10][10] = { 0, };
	idir[5][5] = 1;
	for (int i = 0; i < dirs.size(); i++)
	{
		if (dirs[i] == 'L')
		{
			x--;
			if (x < 0 || x>10 || y < 0 || y>10)
			{
				x++;
				continue;
			}
			if (2 > idir[x][y])
			{
				idir[x][y] += 1;
				answer++;
				cout << "L" << endl;
			}
		}
		else if (dirs[i] == 'R')
		{
			x++;
			if (x < 0 || x>10 || y < 0 || y>10)
			{
				x--;
				continue;
			}
			if (2 > idir[x][y])
			{
				idir[x][y] += 1;
				answer++;
				cout << "R" << endl;
			}
		}
		else if (dirs[i] == 'D')
		{
			y--;
			if (x < 0 || x>10 || y < 0 || y>10)
			{
				y++;
				continue;
			}
			if (2 > idir[x][y])
			{
				idir[x][y] += 1;
				answer++;
				cout << "D" << endl;
			}
		}
		else if (dirs[i] == 'U')
		{
			y++;
			if (x < 0 || x>10 || y < 0 || y>10)
			{
				y--;
				continue;
			}
			if (2 > idir[x][y])
			{
				idir[x][y] += 1;
				answer++;
				cout << "U" << endl;
			}

		}
	}

	return answer;
}
間違った原因は、行った場所を再訪問したときにこのように処理できないことです.
以前よりずっとよくなって、本当に励まされました...
  #include <string>
using namespace std;

int solution(string dirs)
{
	int x = 5; int y = 5; //시작 위치는 배열 기준 (5,5)로 지정
	int count = 0;
	int check[11][11][11][11]; //길 방문 여부(전 x좌표, 전 y좌표, 후 x좌표, 후 y좌표)

	for (int i = 0; i < dirs.length(); i++) {
		if (dirs[i] == 'U') {
			if (y < 10) {
				if (check[x][y][x][y + 1] != 1) {
					check[x][y][x][y + 1] = 1; //방문한 것으로 체크
					check[x][y + 1][x][y] = 1;
					count++;
				}
				y++;
			}
		}
		else if (dirs[i] == 'D') {
			if (y > 0) {
				if (check[x][y][x][y - 1] != 1) {
					check[x][y][x][y - 1] = 1;
					check[x][y - 1][x][y] = 1;
					count++;
				}
				y--;
			}
		}
		else if (dirs[i] == 'L') {
			if (x > 0) {
				if (check[x][y][x - 1][y] != 1) {
					check[x][y][x - 1][y] = 1;
					check[x - 1][y][x][y] = 1;
					count++;
				}
				x--;
			}
		}
		else if (dirs[i] == 'R') {
			if (x < 10) {
				if (check[x][y][x + 1][y] != 1) {
					check[x][y][x + 1][y] = 1;
					check[x + 1][y][x][y] = 1;
					count++;
				}
				x++;
			}
		}
	}
	return count;
}
int check[11][11][11][11];//道路にアクセスするかどうか(前x座標、前y座標、後x座標、後y座標)
この4次元配列も可能であることに気づいた.
このとき、ゲームキャラクターが通る道の中で、キャラクターが初めて歩く道の長さを得ようとする.
注意点は双方向性の長さです.
(1,1)->(1,2)路と(1,2)->(1,1)路は同じ道と考えるべきである.