Programers : 방문길이 - C++

김정욱·2021년 3월 8일
0

Algorithm - 문제

목록 보기
147/249

방문길이

코드

#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으로 처리
profile
Developer & PhotoGrapher

0개의 댓글