http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=521&sca=99&page=3
구현문제 입니다.
우선 문제부터 간단하게 요약하면, 로봇의 규칙과 미로가 주어질 때, 해당하는 규칙으로 로봇이 최대로 이동할 수 있는 거리를 출력하면 됩니다.
<Solution>
구현 문제이므로 문제의 조건에 알맞게 구현을 하면 됩니다. 한번 지나간 길을 다시 지나갈 수 없다 등의 조건이 있으니, 중간중간에 확인을 올바르게 해주어야 함을 주의해서 코드를 구성하면 됩니다.
실제 구현은 아래와 같습니다.
#include <iostream>
using namespace std;
#define MAXN (10)
int N;
char map[MAXN + 10][MAXN + 10];
int dirseq[4];
int cnt;
void InputData() {
cin >> N;
for (int i = 0; i < N; i++) {
cin >> map[i];
}
for (int i = 0; i < 4; i++) {
cin >> dirseq[i];
}
}
int d_row[] = {0, 1, 0, -1, 0}; // 1 2 3 4
int d_col[] = {0, 0, -1, 0, 1};
bool outofblock(int r, int c){
return (r<0 || c< 0 || r>=N || c>= N);
}
void sol(){
int r = 0, c=0;
int dir_index = 0;
map[r][c] = '2';
while(1){
// if can move just move
if(!outofblock(r+d_row[dirseq[dir_index]], c+d_col[dirseq[dir_index]]) && map[r+d_row[dirseq[dir_index]]][c+d_col[dirseq[dir_index]]] == '0'){
r = r+d_row[dirseq[dir_index]];
c = c+d_col[dirseq[dir_index]];
map[r][c] = '2';
cnt ++;
}
else{
//check if already visited
if(!outofblock(r+d_row[dirseq[dir_index]], c+d_col[dirseq[dir_index]]) && map[r+d_row[dirseq[dir_index]]][c+d_col[dirseq[dir_index]]] == '2'){
break;
}
int move_flag = 0;
for(int i = 0; i<3; i++){
dir_index = (dir_index +1)%4;
if(!outofblock(r+d_row[dirseq[dir_index]], c+d_col[dirseq[dir_index]]) && map[r+d_row[dirseq[dir_index]]][c+d_col[dirseq[dir_index]]] == '0'){
move_flag = 1;
r = r+d_row[dirseq[dir_index]];
c = c+d_col[dirseq[dir_index]];
map[r][c] = '2';
break;
}
//check if already visited
if(!outofblock(r+d_row[dirseq[dir_index]], c+d_col[dirseq[dir_index]]) && map[r+d_row[dirseq[dir_index]]][c+d_col[dirseq[dir_index]]] == '2'){
break;
}
}
if(move_flag == 0 || dir_index > 3){
break;
}
cnt++;
}
}
}
int main() {
int ans = -1;
InputData();//입력
sol();
cout << cnt << "\n";//출력
return 0;
}
반응형
'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글
[백준] Tractor (0) | 2022.11.26 |
---|---|
[백준] 색종이 - 2 (0) | 2022.11.25 |
[정올] 회의실 배정 (0) | 2022.11.25 |
[정올] 도서관 (0) | 2022.11.25 |
[정올] 냉장고 (0) | 2022.11.25 |