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
- 과제진행하기
- Lv3
- 백준알고리즘
- 5강클로저
- solved.ac골드
- 지도 여러개
- 비트마스크
- 2023카카오블라인드코테
- JS스터디
- c++
- 스택
- solved.ac플래티넘
- div2개
- DP
- 프로그래머스
- 타겟넘버
- 이중지도
- 알고리즘 문제풀이
- 정렬
- 두원사이의정수쌍
- pccp기출문제
- 최소스패닝트리
- Lv2
- 백준 알고리즘
- JS
- [pccp 기출문제]
- 우박수열정적분
- React.StrictMode
- 코어자바스크립트
- 알고리즘문제풀이
Archives
- Today
- Total
호지
[프로그래머스] 리코쳇 로봇 c++ 본문
BFS를 이용한 문제풀이입니다.
주어진 board에서 robot의 위치를 먼저 구합니다.
로봇은 상하좌우 방향으로 움직일 수 있고,
한 방향으로 움직이다가 장애물 D를 만나거나 board에 끝에 도달할때까지 움직입니다.
로봇이 움직일 수 있는 위치는 list큐에 넣습니다.
움직일 수 있는 위치 여부는 상하좌우(moves배열) 방향을 다 확인하고
한번 방문한 위치는 board를 C로 표기하여 중복 방문을 막습니다.
list 큐가 empty면 G에 도달하지 못한 것이므로 -1을 반환하고,
중간에 G에 도달하면 해당위치의 count를 반환합니다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<string> board) {
int answer = -1;
pair<int, int> pos_robot;
int rowN = board.size();
int colN = board[0].size();
for(int i=0; i<rowN; i++){
for(int j=0; j<colN; j++){
if(board[i][j] == 'R'){
pos_robot = make_pair(i, j);
break;
}
}
}
queue <pair<int,int>> list;
queue <int> count;
list.push(pos_robot);
count.push(0);
int moves[4][2] = {{1,0}, {0,1}, {-1,0}, {0,-1}};
while(!list.empty()){
int x = list.front().first;
int y = list.front().second;
int n = count.front();
for(int i=0; i<4; i++){
while(x+moves[i][0] >= 0 && x+ moves[i][0] < rowN && y+moves[i][1] >= 0 && y+moves[i][1]<colN && board[x+moves[i][0]][y+moves[i][1]] !='D'){
x += moves[i][0];
y += moves[i][1];
}
if(x != list.front().first || y != list.front().second){
if(board[x][y] == 'G'){
answer = n + 1;
return answer;
}
if(board[x][y] != 'C'){
list.push(make_pair(x,y));
count.push(n+1);
board[x][y] = 'C';
}
x = list.front().first;
y = list.front().second;
}
}
list.pop();
count.pop();
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/169199
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 인사고과 문제풀이 c++ (0) | 2023.04.02 |
---|---|
[프로그래머스] 연속 펄스 부분 수열의 합 c++ (0) | 2023.03.31 |
[프로그래머스] 전화번호 목록 문제풀이 c++ (0) | 2022.04.14 |
[프로그래머스] 빛의 경로 사이클 문제풀이 c++ (0) | 2022.04.14 |
[프로그래머스] 튜플 문제풀이 c++ (0) | 2022.04.14 |
Comments