반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 소켓
- Crawling
- javascript
- Nestjs
- HTTP 완벽 가이드
- 프로그래머스
- 백준
- 크롤링
- 레벨 1
- Node.js
- 수학
- Algorithm
- 문자열
- dp
- 그래프
- dfs
- 타입 챌린지
- 가천대
- HTTP
- 자바스크립트
- 알고리즘
- ip
- TCP
- 프로그래머스 레벨 2
- type challenge
- BFS
- 타입스크립트
- typescript
- 쉬운 문제
- socket
Archives
- Today
- Total
kakasoo
[node.js] 방문 길이 ( 프로그래머스 레벨2 ) 본문
반응형
const solution = (dirs) => {
const answer = [];
let next = { y : 5, x : 5 };
dirs.split('').forEach((dir) => {
const cur = next;
const funcs = { "U" : function (cur) { return { y : cur.y + 1, x : cur.x }; },
"D" : function (cur) { return { y : cur.y - 1, x : cur.x }; },
"R" : function (cur) { return { y : cur.y, x : cur.x + 1 }; },
"L" : function (cur) { return { y : cur.y, x : cur.x - 1 }; },
};
next = funcs[dir](cur);
if (next.y < 0 || next.y > 10 || next.x < 0 || next.x > 10) {
next = cur;
} else {
const aTob = `${cur.x}${cur.y}${next.x}${next.y}`;
const bToa = `${next.x}${next.y}${cur.x}${cur.y}`;
if (!answer.includes(aTob) && !answer.includes(bToa)) {
answer.push(aTob);
}
}
})
return answer.length;
}
현재 점으로부터 다음 점을 찾는다. UP, DOWN, LEFT, RIGHT 마다 좌표 값을 바꿔주면 된다.
그것을 next 라는 변수에 저장한다.
이 시점에서 cur, next를 알 수 있다.
이동 경로는 그냥 cur.x,cur.y,next.x,next.y를 문자로 치환해서 쭉 이어붙인다.
네 자리 숫자가 될 것이다. ( 마이너스가 끼어 있는 네 자리 숫자가 될 수도 있다. )
이 숫자들이 고유하도록 하면 된다.
따라서, 이미 있는 경우에는 넣지 않는다.
단, cur과 next가 거꾸로 되어 있는 경우에도 같은 도로를 이용해야 하므로 이 부분을 잘 체크해준다.
그래프 밖에 벗어날 경우도 체크해줘야 한다.
반응형
'프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
[node.js] 점프와 순간 이동 ( 프로그래머스 레벨2 ) (0) | 2021.07.05 |
---|---|
[node.js] 가장 먼 노드 ( 프로그래머스 레벨3 ) (0) | 2021.07.02 |
[node.js] 괄호 회전하기 ( 프로그래머스 레벨2 ) (0) | 2021.07.01 |
[node.js] 쿼드 압축 후 개수 세기 ( 프로그래머스 레벨2 ) (0) | 2021.07.01 |
[node.js] 튜플 ( 프로그래머스 레벨2 ) (0) | 2021.07.01 |