Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- UnrealEngine5
- IFileDialog
- 프로그래머스
- UnrealEngine4
- const
- Unreal Engine5
- DeferredRendering
- 언리얼엔진5
- 티스토리챌린지
- winapi
- Frustum
- algorithm
- C++
- 오블완
- GeeksForGeeks
- DirectX11
- 줄 세우기
- RVO
- UE5
- NRVO
- directx
- 팰린드롬 만들기
- softeer
- Programmers
- RootMotion
- 1563
- C
- baekjoon
- 2294
- 백준
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 리코쳇 로봇 본문
https://school.programmers.co.kr/learn/courses/30/lessons/169199
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
struct Node
{
int y;
int x;
int count;
};
int dir[4][2] = { {-1,0}, {1,0}, {0,-1}, {0,1} };
bool visited[101][101] = { false };
int solution(vector<string> board)
{
int answer = -1;
int row = board.size();
int col = board[0].size();
queue<Node> q;
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
if (board[i][j] == 'R')
{
q.push({ i,j,0 });
visited[i][j] = true;
break;
}
}
}
while (!q.empty())
{
int curY = q.front().y;
int curX = q.front().x;
int curCount = q.front().count;
q.pop();
if (board[curY][curX] == 'G') return curCount;
for (int i = 0; i < 4; ++i)
{
int tempY = curY;
int tempX = curX;
while (1)
{
int nextY = tempY + dir[i][0];
int nextX = tempX + dir[i][1];
if (nextY < 0 || nextY >= row || nextX < 0 || nextX >= col || board[nextY][nextX] == 'D')
{
if (visited[tempY][tempX]) break;
visited[tempY][tempX] = true;
q.push({ tempY,tempX,curCount + 1 });
break;
}
else
{
tempY = nextY;
tempX = nextX;
}
}
}
}
return answer;
}
|
cs |
특정지점에 도달할 수 있는 최소한의 횟수를 구하는 문제이다.
그래서 기본적인 접근은 BFS로 했으며, 이 문제같은 경우는 조건이 하나 더 달려있다.
board의 벽이나 'D'를 만나기 전까지는 계속해서 미끄러지듯이 이동하는 것이다.
미끄러지듯이 이동할 때는 카운팅을 하지않는다. 즉, 멈춰섰을 때 다음움직임을 할때 카운팅을 하면 된다.
처음에는 미끄러지듯이 이동하는것도 한칸씩 큐에 넣는식으로 했더니 전체 테스트케이스중에서 3,4개정도 자꾸 틀리길래 시간 좀 많이 소비했다. 테스트케이스들을 찾아서해도 해결이 안되길래 아예 지우고 다시 짰다.
생각해보니 미끄러지듯이 이동하는거는 굳이 한칸씩 넣을필요 없이 바로 처리가 가능하며 코드도 훨씬 깔끔하기 때문에 해당방식으로 다시 구현했다.
은근히 이런 유형도 꽤 나오는것 같아서 백준의 비슷한유형의 문제를 더 풀어봐야겠다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 연속된 부분 수열의 합 (0) | 2023.06.26 |
---|---|
[Algorithm] Programmers :: 과제 진행하기 (0) | 2023.06.26 |
[Algorithm] Programmers :: 당구 연습 (0) | 2023.06.17 |
[Algorithm] Programmers :: 혼자서 하는 틱택토 (0) | 2023.06.16 |
[Algorithm] Programmers :: 미로 탈출 (0) | 2023.06.15 |