[프로그래머스/C++] 방문길이
1.문제 링크
2. 풀이 전 계획과 생각
- set 자료형 사용하기
3. 풀이
#include <string>
#include <set>
using namespace std;
int solution(string dirs) {
int cx=0, cy=0;
set<pair<pair<int,int>,pair<int,int>>> s;
for(int i=0;i<dirs.size();i++){
if(dirs[i]=='U'){
if(cy==5) continue;
s.insert({ {cx,cy},{cx,cy+1} });
s.insert({ {cx,cy+1},{cx,cy} }); // 같은 경로 취급
cy += 1;
}
else if(dirs[i]=='D'){
if(cy==-5) continue;
s.insert({ {cx,cy},{cx,cy-1} });
s.insert({ {cx,cy-1},{cx,cy} }); // 같은 경로 취급
cy -= 1;
}
else if(dirs[i]=='R'){
if(cx==5) continue;
s.insert({ {cx,cy},{cx+1,cy} });
s.insert({ {cx+1,cy},{cx,cy} }); // 같은 경로 취급
cx += 1;
}
else if(dirs[i]=='L'){
if(cx==-5) continue;
s.insert({ {cx,cy},{cx-1,cy} });
s.insert({ {cx-1,cy},{cx,cy} }); // 같은 경로 취급
cx -= 1;
}
}
int answer = s.size()/2;
return answer;
}
명령어가 U인경우… 현재 y좌표가 5라면 건너뛰기
명령어가 D인경우… 현재 y좌표가 -5라면 건너뛰기
명령어가 R인경우… 현재 x좌표가 5라면 건너뛰기
명렁어가 L인경우… 현재 x좌표가 -5라면 건너뛰기
각 명령어에 맞게 새로운 좌표를 set 자료형에 insert해준다. 시작좌표, 도착좌표를 삽입한다. 이때 도착좌표, 시작좌표 순서로 한번더 삽입한다.
마지막에 set 크기를 2로 나누어 반환한다.
4. 풀이하면서 고민했던 점
- 테스트8 부터 통과되지 않음. 알고보니 예로들어 “UDU”의 경우 갔다가 다시 되돌아 오는 경우는 1로 취급해야 했다. 그래서 set 자료형에 insert할 때 (시작좌표, 도착좌표), (도착좌표, 시작좌표)로 2번 삽입해서 해결했다.
5. 문제를 풀고 알게된 개념 및 소감
- set자료형에 pair 사용이 가능하다는 것을 알게됨.