[c++/프로그래머스] 방문 길이

조히·2023년 2월 22일
0

PS

목록 보기
27/82

문제 링크

방문 길이

풀이

set으로 푸는 문제

  1. 먼저 현재 위치 curXcurY 초기화
  2. 중복된 길 처리를 위해 set을 사용하였다.
    2-1. 입력에 따라 현재 위치를 갱신해주고, 이 때 좌표평면 범위도 생각해준다.
    2-2. 좌표평면 밖을 나간 입력이라면 prePoscurPos가 같을 테니까, 이는 제외해주고 prePoscurPos를 오름차순 정렬 해주어 set에 넣어준다.
    (이는 1→2, 2→1 같은 중복된 길을 처리해주기 위함)
  3. set의 사이즈를 출력한다.

코드

#include <string>
#include <set>
#include <algorithm>

using namespace std;

int solution(string dirs) {
    int answer = 0;
    
    int curX = 0;
    int curY = 0;
    
    set<vector<pair<int,int>>> s;
    
    for(int i=0;i<dirs.size();i++)
    {
        pair<int,int> prePos = {curX, curY};
        
        if(dirs[i]=='U' && curY<5) curY++;
        else if(dirs[i]=='D' && curY>-5) curY--;
        else if(dirs[i]=='R' && curX<5) curX++;
        else if(dirs[i]=='L' && curX>-5) curX--;
        
        pair<int,int> curPos = {curX, curY};
        
        if(prePos != curPos)
        {
            vector<pair<int,int>> tmp;
            tmp.push_back(prePos);
            tmp.push_back(curPos);
            sort(tmp.begin(), tmp.end());
            s.insert(tmp);
        }
    }
    
    answer = s.size();
    
    return answer;
}
profile
Juhee Kim | Game Client Developer

0개의 댓글