Level 2. 방문 길이
bool 타입의 visited[fromX][fromY][toX][toY] 4차원 배열에 방문 여부를 저장하여 해결했다.
예를 들어, 한 번 표시할 때는 (3,4) -> (4, 4)와 (4, 4) -> (3, 4)를 함께 표시해야 한다.
인덱스는 매크로 함수를 만들어 -5 ~ 5를 0 ~ 10으로 매핑했다.
#include <iostream>
#include <utility>
#define I(x) ((x) + 5)
using namespace std;
int solution(string dirs)
{
int answer = 0;
bool visited[11][11][11][11] = {false};
pair<int, int> current = {I(0), I(0)};
for (char c : dirs)
{
pair<int, int> t = current;
switch (c)
{
case 'U':
if (current.second < I(5))
current.second += 1;
break;
case 'D':
if (I(-5) < current.second)
current.second -= 1;
break;
case 'R':
if (current.first < I(5))
current.first += 1;
break;
case 'L':
if (I(-5) < current.first)
current.first -= 1;
break;
}
if (t != current && visited[t.first][t.second][current.first][current.second] == false)
{
visited[t.first][t.second][current.first][current.second] =
visited[current.first][current.second][t.first][t.second] = true;
++answer;
}
}
return answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2. 행렬의 곱셈 (0) | 2023.03.29 |
---|---|
Level 2. 쿼드압축 후 개수 세기 (0) | 2023.03.28 |
Level 2. 짝지어 제거하기 (0) | 2023.03.26 |
Level 2. 영어 끝말잇기 (0) | 2023.03.25 |
Level 2. JadenCase 문자열 만들기 (0) | 2023.03.24 |