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 | 29 | 30 | 31 |
Tags
- select
- softeer
- SQL 고득점 KIT
- 자바스크립트
- 티스토리챌린지
- Dynamic Programming
- Lv. 2
- 프로그래머스
- C언어
- LEVEL 2
- 오블완
- dfs
- level 3
- Lv. 1
- bfs
- Lv. 3
- group by
- Lv. 0
- 너비 우선 탐색
- join
- Java
- programmers
- SQL
- 깊이 우선 탐색
- Python
- 동적계획법
- 파이썬
- javascript
- DP
- 소프티어
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 2] 방문 길이 {언어 : JavaScript} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/49994?language=javascript
정답 코드
function solution(dirs) {
const visited = {};
let [sr, sc] = [0, 0];
const isValid = (r, c, dr, dc) => {
const [nr, nc] = [r+dr, c+dc];
return -5 <= nr && nr <= 5 && -5 <= nc && nc <= 5;
};
for (const d of dirs) {
let [r, c] = [sr, sc];
let isChanged = false;
if (d == "U") {
if (isValid(r, c, 1, 0)) {
r += 1;
isChanged = true;
};
} else if (d == "D") {
if (isValid(r, c, -1, 0)) {
r -= 1;
isChanged = true;
};
} else if (d == "R") {
if (isValid(r, c, 0, 1)) {
c += 1;
isChanged = true;
};
} else {
if (isValid(r, c, 0, -1)) {
c -= 1;
isChanged = true;
};
};
const newKey = String(sr) + String(sc) + String(r) + String(c);
const prevKey = String(r) + String(c) + String(sr) + String(sc);
// console.log(d, sr, sc, newKey);
[sr, sc] = [r, c];
if (isChanged) {
visited[newKey] = 1;
visited[prevKey] = 1;
};
};
const answer = Object.keys(visited).length / 2;
return answer;
}
풀이 방법
- 시작 지점 0, 0을 만든다.
- 범위를 벗어나지 않도록 isValid 함수를 만든다.
- 방문배열을 딕셔너리로 만들고 체크해준다.
- 여기서 주의할 점은 1,1에서 0,0으로 이동한 길과 0,0에서 1,1로 이동한 길은 같기 때문에 왕복으로 저장한다.
- answer를 딕셔너리의 키값으로 하는데 왕복 저장한 길을 2로 나눈다.
느낀점
- 쉽지만 길에 대한 개념은 왕복의 개념이 포함되어 있다는 것을 잊지 말자.
'알고리즘' 카테고리의 다른 글
프로그래머스 [Lv. 2] 더 맵게 {언어 : Python} (0) | 2024.05.09 |
---|---|
프로그래머스 [Lv. 2] 스킬 트리 {언어 : Python} (0) | 2024.05.08 |
프로그래머스 [Lv. 2] 멀쩡한 사각형 {언어 : JavaScript} (0) | 2024.05.05 |
프로그래머스 [Lv. 2] 쿼드압축 후 개수 세기 {언어 : Python} (0) | 2024.05.05 |
프로그래머스 [Lv. 2] 이진 변환 반복하기 {언어 : JavaScript} (0) | 2024.05.04 |