https://programmers.co.kr/learn/courses/30/lessons/86052
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool check[600][600][4] = { false }; //각 노드의 뱡향 간 여부
vector<int> y = { 0,1,0,-1 }; //세로 {y,x}
vector<int> x = { 1,0,-1,0 }; //가로
int n, m;
int Circle(vector<string> &grid, pair<int, int> node, int path,int count) {
if (check[node.first][node.second][path]) {
return count;
}
check[node.first][node.second][path] = true;
switch (grid[node.first][node.second])
{
case 'L':
path = (path == 3) ? 0 : path + 1;
break;
case 'R':
path = (path == 0) ? 3 : path - 1;
break;
}
node = { node.first + y[path], node.second + x[path] };
if (node.first < 0) {
node.first = n - 1;
}if (node.first > n - 1) {
node.first = 0;
}if (node.second < 0) {
node.second = m - 1;
}if (node.second > m - 1) {
node.second = 0;
}
count = Circle(grid, node, path,count+1);
return count;
}
vector<int> solution(vector<string> grid) {
vector<int> answer;
n = grid.size();
m = grid[0].size();
for (int i = 0; i < n; i++) {
for (int k = 0; k < m; k++) {
for (int t = 0; t < 4; t++) {
int n = Circle(grid, { i,k }, t, 0);
if (n > 0) {
answer.push_back(n);
}
}
}
}
sort(answer.begin(), answer.end());
return answer;
}
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 백준 "11055. 가장 큰 증가 부분 수열" (0) | 2022.05.22 |
---|---|
(c++) 백준 "2527. 직사각형" (0) | 2022.05.21 |
(c++) 프로그래머스 "교점에 별 만들기" (0) | 2022.05.17 |
(c++) 프로그래머스 "전력망을 둘로 나누기" (0) | 2022.05.17 |
(c++) 프로그래머스 "모음사전" (0) | 2022.05.14 |