이동할 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;
}
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
연습) string 에서 숫자 추출하기 (0) | 2022.06.22 |
---|---|
[구현 / c++] 하루 중 3 이 하나라도 들어간 모든 시각의 경우의 수 (0) | 2022.06.21 |
[greedy / c++] 최대의 모험단 수 만들기 (0) | 2022.06.21 |
[프로그래머스 2 / c++] 전화번호 목록 - 해시 (0) | 2022.06.21 |
[프로그래머스 1 / c++] k번째 수 (0) | 2022.06.20 |
댓글