#include <string>
#include <map>
#include <iostream>
using namespace std;
int solution(string dirs) {
int ans = 0;
map<string,bool> m;
pair<int,int> cur={0,0};
for(int i=0;i<dirs.length();i++)
{
auto tmp = cur;
string s = "v";
bool horizn = false;
if(dirs[i] == 'U') tmp.first++;
else if(dirs[i] == 'D') tmp.first--;
else if(dirs[i] == 'R') tmp.second++;
else if(dirs[i] == 'L') tmp.second--;
if(tmp.first<-5 or tmp.second<-5 or tmp.first>5 or tmp.second>5) continue;
if(dirs[i] == 'U' or dirs[i] =='D'){
string t1 = "x"+to_string(cur.second) +"y"+ to_string(cur.first) + to_string(tmp.first);
string t2 = "x"+to_string(cur.second) +"y"+ to_string(tmp.first) + to_string(cur.first);
if(!m[t1] and !m[t2]) {
ans++;
m[t1] = true;
m[t2] = true;
}
}else{
string t1 = "y"+to_string(cur.first) +"x"+ to_string(cur.second) + to_string(tmp.second);
string t2 = "y"+to_string(cur.first) +"x"+ to_string(tmp.second) + to_string(cur.second);
if(!m[t1] and !m[t2]) {
ans++;
m[t1] = true;
m[t2] = true;
}
}
cur = tmp;
}
return ans;
}
- 로직
1) tmp로 움직인 후 범위 벗어나면 continue
2) 범위가 벗어나지 않으면 x,y좌표
로 2방향 문자열
을 만들어 map
으로 처리