반응형
programmers.co.kr/learn/courses/30/lessons/49994
단순 구현문제였습니다.
풀이방법
1. 현재 위치에서 이동시에 좌표평면 바깥으로 넘어가지 않는다면 걸어갈 수 있는지 판단할 수 있습니다.
2. 넘어가지 않는다면 명령어를 시행한 후의 다음위치 X,Y를 nextX, nextY변수에 저장해줍니다.
3. 다음 각자 가는 방향에 따라 판단해줍니다.
3-1. 'U'인경우
현재위치에서 올라가는 방향이 이미 간 길이 아니라면 새로운 길이므로 answer++; 그리고 다음위치에서 내려가는 방향 또한 같은 길이기 때문에 갱신해주어야합니다.
3-2. 'D'인경우
현재위치에서 내려가는 방향이 이미 간 길이 아니라면 새로운 길이므로 answer++; 그리고 다음위치에서 올라가는 방향 또한 같은 길이기 때문에 갱신해주어야합니다.
3-3. 'L'인 경우
현재위치에서 왼쪽으로 가는 방향이 이미 간 길이 아니라면 새로운 길이므로 answer++; 그리고 다음위치에서 오른쪽으로 가는 방향 또한 같은 길이기 때문에 갱신(체크)해주어야합니다.
3-4. 'R'인 경우
현재위치에서 오른쪽으로 가는 방향이 이미 간 길이 아니라면 새로운 길이므로 answer++; 그리고 다음위치에서 왼쪽으로 가는 방향 또한 같은 길이기 때문에 갱신(체크)해주어야합니다.
Code
#include <bits/stdc++.h>
using namespace std;
int solution(string dirs) {
int answer = 0;
//상,하,좌,우
int ck[11][11][4];
memset(ck,0,sizeof(ck));
int curX = 0,curY = 0, nextX = 0, nextY = 0;
for(int i = 0; i < dirs.size(); i++){
if(dirs[i] == 'U'){
if(-5 <= curY + 1 && curY + 1 <= 5){
nextY = curY + 1;
if(!ck[curY+5][curX+5][0]){
ck[curY+5][curX+5][0] = 1;
ck[nextY+5][nextX+5][1] = 1;
answer++;
}
}
}
else if(dirs[i] == 'D'){
if(-5 <= curY - 1 && curY - 1 <= 5){
nextY = curY - 1;
if(!ck[curY+5][curX+5][1]){
ck[curY+5][curX+5][1] = 1;
ck[nextY+5][nextX+5][0] = 1;
answer++;
}
}
}
else if(dirs[i] == 'L'){
if(-5 <= curX - 1 && curX - 1 <= 5){
nextX = curX - 1;
if(!ck[curY+5][curX+5][2]){
ck[curY+5][curX+5][2] = 1;
ck[nextY+5][nextX+5][3] = 1;
answer++;
}
}
}
else{
if(-5 <= curX + 1 && curX + 1 <= 5){
nextX = curX + 1;
if(!ck[curY+5][curX+5][3]){
ck[curY+5][curX+5][3] = 1;
ck[nextY+5][nextX+5][2] = 1;
answer++;
}
}
}
curX = nextX;
curY = nextY;
}
return answer;
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 3190번 : 뱀 (0) | 2021.04.09 |
---|---|
(C++) - 프로그래머스(2019 KAKAO BLIND RECRUITMENT) : 실패율 (0) | 2021.04.08 |
(C++) - 백준(BOJ) 14654번 : 스테판 쿼리 (0) | 2021.03.26 |
(C++) - 백준(BOJ) 5212번 : 지구온난화 (0) | 2021.03.24 |
(C++) - 백준(BOJ) 12100번 : 2048(Easy) (0) | 2021.03.24 |