지우너
[코드트리] 숫자가 더 큰 인접한 곳으로 이동 C++ 본문
문제
계획세우기
- 상하좌우를 살피면서 중앙의 값과 비교
- 중앙의 값보다 큰 값이 있으면 해당 값으로 max 값을 갱신해주고, x, y위치를 옮겨준다.(상하좌우 우선순위에 따라 움직이기 때문에 다른 곳에 더 큰 값이 있어도 가장 먼저 만난 자신보다 큰 값으로 갱신됨)
- 상하좌우를 다 살폈는데 갱신된 적이 없다면 while 무한 반복을 나와준다.
풀이
#include <iostream>
using namespace std;
int n;
int arr[101][101];
void Move(int r, int c){
//상(-1,0)하(1,0)좌(0,-1)우(0,1) 방향 순서대로 우선순위
int dx[4]={-1, 1, 0, 0};
int dy[4]={0, 0, -1, 1};
int x=r, y=c;
while(true){
cout << arr[x][y] << " ";
int maxNum=arr[x][y];
bool isUpdated=false;
for(int dir=0; dir<4; dir++){
int nx=x+dx[dir];
int ny=y+dy[dir];
if(nx<0 || nx>=n || ny<0 || ny>=n) continue;
if(arr[nx][ny]>maxNum){
isUpdated=true;
maxNum=arr[nx][ny];
x=nx;
y=ny;
break;
}
}
if(!isUpdated) break;
}
}
int main() {
int r, c;
cin >> n >> r >> c;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin >> arr[i][j];
}
}
Move(r-1, c-1);
return 0;
}
'Problem Solving' 카테고리의 다른 글
[코드트리] 벽 짚고 미로 탈출하기 C++ (0) | 2024.06.09 |
---|---|
[코드트리] 1차원 폭발 게임 C++ (0) | 2024.06.08 |
[코드트리] 십자 모양 폭발 C++ (0) | 2024.06.07 |
[코드트리] 1차원 젠가 C++ (0) | 2024.06.06 |
[코드트리] 최단 Run Length 인코딩 C++ (0) | 2024.06.06 |