본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[구현 / c++] 상하 좌우 이동

by tokkiC 2022. 6. 21.

이동할 dx, dy를 움직임을 표현할 기호 LRUD와 인덱스를 같게 해주어서

4방향이니 4가지 인덱스 중 입력한 LRUD와 인덱스가 같을때 이동하도록 코드를 짠 점

그리고 예외 사항인 맵 밖을 벗어났을때는 움직이지 않도록 하기 위해, 이동이 적용된 예상 좌표를 구하고

수정 후 좌표가 맵 범위 밖일때, continue하여 갱신하지 않고,

범이 밖이 아닌 경우에만 좌표를 갱신하도록  한 점이 포인트였다

여러번 반복해서 풀어보고 익숙해지자

#include <bits/stdc++.h>
using namespace std;

int n; // 이동할 맵 범위로 쓸 n 입력 
string plans;
int x=1, y=1; // 시작 위치 초기화 

// L R U D 에 따른 이동방향
int dx[4]={0,0,-1,1}; // 오른쪽 아래로 향하는 이동이다 
int dy[4]={-1,1,0,0};
char moveTypes[4]={'L','R','U','D'};

int main(){

cin >> n; 
cin.ignore(); // 입력 버퍼 비우기
getline(cin, plans); // 한 줄 입력하여 plans 에 저장 

// 이동 내용 하나씩 나눠 실행하기
for(int i=0; i<plans.size(); i++){
char plan=plans[i]; // 담긴 curd 하나하나를 plan 이라하자 
// 이동 후 좌표 구하기
int nx=0, ny=0; // 새 좌표 선언 및 초기화
for(int j=0; j<4; j++){  // if 를 통해 4가지 인덱스 중 하나를 선택  
if(moveTypes[j]==plan){  // 문자로 이동 인덱스 획득  
nx = x+dx[j]; // 인덱스를 사용해 이동 내용 실행 
ny = y+dy[j]; //  
}
}
// 이동 후 공간 벗어날 시 좌표 갱신 무시  
if(nx<1 || ny<1 || nx> n || ny>n) 
continue;
// 이동 내용 수행, 좌표 갱신 
x=nx;
y=ny;
} 
cout << x << ' ' << y << "\n";

return 0;
}

댓글