-
프로그래머스 - 방문 길이 [C++]문제 풀이/프로그래머스 2023. 8. 28. 20:23반응형
이 문제는 주어진 대로 구현하면 풀리는 문제이다. 일단 길에 대한 방문 여부를 map<vector<int>, bool> visited로 표현했다. 이는 y, x, ny, nx 총 4개의 정수로 이루어져있고, (y, x) 좌표에서 (ny, nx)로 가는 간선의 표현이다. y, x 각각 -5부터 5까지의 범위이므로 단순 배열로 표현하면 구현이 살짝 헷갈려서 map을 이용해서 풀었다.
#include <string> #include <utility> #include <map> #include <vector> using namespace std; int dy[] = {-1, 0, 1, 0}; int dx[] = {0, -1, 0, 1}; #define UP 0 #define LEFT 1 #define DOWN 2 #define RIGHT 3 bool inRange(int y, int x) { if (-5 <= y && y <= 5 && -5 <= x && x <= 5) { return true; } return false; } map<vector<int>, bool> visited; int solution(string dirs) { int answer = 0; int y = 0; int x = 0; for (char d : dirs) { int ny; int nx; switch (d) { case 'U': ny = y + dy[UP]; nx = x + dx[UP]; break; case 'L': ny = y + dy[LEFT]; nx = x + dx[LEFT]; break; case 'D': ny = y + dy[DOWN]; nx = x + dx[DOWN]; break; case 'R': ny = y + dy[RIGHT]; nx = x + dx[RIGHT]; } if (inRange(ny, nx)) { vector<int> temp = {y, x, ny, nx}; if (!visited[temp]) { answer++; visited[temp] = true; vector<int> rev = {ny, nx, y, x}; visited[rev] = true; } y = ny; x = nx; } } return answer; }
반응형'문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - [3차] 파일명 정렬 [C++] (0) 2023.08.28 프로그래머스 - 스킬트리 [C++] (0) 2023.08.28 프로그래머스 - 오픈채팅방 [C++] (0) 2023.08.28 프로그래머스 - 부대복귀 [C++] (0) 2023.08.28 프로그래머스 - 거스름돈 [C++] (0) 2023.08.28