๋ฐ์ํ
๋ฌธ์
- ํค์๋: ์ค๋ณต ์ฒ๋ฆฌ, ์ญ๋ฐฉํฅ
๋์ ํ์ด
- ์๊ฐ ๋ณต์ก๋: O(N)
function solution(dirs) {
// โ ์ค๋ณต ์ฒ๋ฆฌ๋ฅผ ์ํ Set
const visited = new Set();
let x = 0, y = 0;
// โ ๋ฐฉํฅ์ ๋ฐ๋ฅธ ์ขํ ๋ณํ
const moves = {
'U': [0, 1],
'D': [0, -1],
'R': [1, 0],
'L': [-1, 0]
};
for (const dir of dirs) {
const [dx, dy] = moves[dir];
const nx = x + dx;
const ny = y + dy;
// โ ์ฃผ์ด์ง ๋ฒ์ ๋ด์ธ์ง ํ์ธ
if (nx >= -5 && nx <= 5 && ny >= -5 && ny <= 5) {
const path = JSON.stringify({from: [x, y], to: [nx, ny]});
const reversePath = JSON.stringify({from: [nx, ny], to: [x, y]});
// โ ์ ๋ฐฉํฅ ๊ฒฝ๋ก์ ์ญ๋ฐฉํฅ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ํ์ธ
if (!visited.has(path) && !visited.has(reversePath)) {
visited.add(path);
}
[x, y] = [nx, ny];
}
}
return visited.size;
}
moves
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฐฉํฅ์ ๋ํ ์ขํ ๋ณํ๋ฅผ ์ ์ํ๊ณ , Set
์ ํ์ฉํ์ฌ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํฉ๋๋ค. ๊ฐ ์ด๋๋ง๋ค ํ์ฌ ์์น์์ ์ ์์น๋ก์ ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด๋ก ํํํ์ฌ Set
์ ์ถ๊ฐํ๋๋ฐ, ์ด๋ ์ญ๋ฐฉํฅ ๊ฒฝ๋ก๋ ํจ๊ป ์ฒดํฌํ์ฌ ์ค๋ณต์ ๋ฐฉ์งํฉ๋๋ค. ์ขํ์ ๊ฒฝ๊ณ(-5 ~ 5)๋ฅผ ๋ฒ์ด๋์ง ์๋๋ก ํ์ธํ๋ฉฐ, ์ต์ข
์ ์ผ๋ก Set
์ ํฌ๊ธฐ๋ฅผ ๋ฐํํ์ฌ ์ ์ผํ ๊ฒฝ๋ก์ ์๋ฅผ ์ป์ต๋๋ค.
โ ๏ธ ๋ฌธ์์ด๋ก ํํํ์ฌ Set์ ์ถ๊ฐ: ๊ฐ์ฒด๋ ์ฐธ์กฐ ํ์ ์ด๋ฏ๋ก ๋ด์ฉ ๊ธฐ๋ฐ ๋น๊ต ์ ์ง์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ
๋ฌธ์ ์
- JSON.stringify() ํธ์ถ๋ก ์ธํ ์ฑ๋ฅ ์ ํ
- ํ๋์ ํจ์์ ์ง์ค๋ ๊ธฐ๋ฅ๋ค
๋ค๋ฅธ ํ์ด
function isValidMove(nx, ny) {
// โ ์ขํํ๋ฉด์ ๋ฒ์ด๋๋์ง ์ฒดํฌํ๋ ํจ์
return nx >= -5 && nx <= 5 && ny >= -5 && ny <= 5;
}
function updateLocation(x, y, dir) {
// โ ๋ช
๋ น์ด๋ฅผ ํตํด ๋ค์ ์ขํ ๊ฒฐ์
switch (dir) {
case "U":
return [x, y + 1];
case "D":
return [x, y - 1];
case "R":
return [x + 1, y];
case "L":
return [x - 1, y];
}
}
function solution(dirs) {
let x = 0;
let y = 0;
const visited = new Set(); // โ ๊ฒน์น๋ ์ขํ๋ 1๊ฐ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํจ
for (const dir of dirs) {
// โ ์ฃผ์ด์ง ๋ช
๋ น์ด๋ก ์์ง์ด๋ฉด์ ์ขํ ์ ์ฅ
const [nx, ny] = updateLocation(x, y, dir);
if (!isValidMove(nx, ny)) {
// โ ๋ฒ์ด๋ ์ขํ๋ ์ธ์ ํ์ง ์์
continue;
}
// โ A์์ B๋ก ๊ฐ ๊ฒฝ์ฐ B์์ A๋ ์ถ๊ฐํด์ผ ํจ(์ด ๊ฒฝ๋ก์ ๊ฐ์๋ ๋ฐฉํฅ์ฑ์ด ์์)
visited.add(`${x}${y}${nx}${ny}`);
visited.add(`${nx}${ny}${x}${y}`);
[x, y] = [nx, ny]; // โ ์ขํ๋ฅผ ์ด๋ํ์ผ๋ฏ๋ก ์
๋ฐ์ดํธ
}
return visited.size / 2;
}
- ๋ณ๋์ ํ์ธ ๊ณผ์ ์์ด ์ ๋ฐฉํฅ ๊ฒฝ๋ก์ ์ญ๋ฐฉํฅ ๊ฒฝ๋ก๋ฅผ ๋์์ ์ถ๊ฐํ๊ณ , ์ต์ข ์ด๋ ๊ธธ์ด๋ฅผ 2๋ก ๋๋
Reference
๋ฐ์ํ
'๐ข Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript][Programmers] ํ ํธ์ง - 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ (0) | 2024.08.09 |
---|---|
[Javascript][Programmers] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (0) | 2024.08.05 |
[Javascript][Programmers] ์ฃผ์ ๊ฐ๊ฒฉ (0) | 2024.08.03 |
[Javascript][Programmers] ๊ดํธ ํ์ ํ๊ธฐ (0) | 2024.08.01 |
[Javascript][Programmers] ์คํจ์จ - 2019 KAKAO (0) | 2024.07.29 |