์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- .map()
- ์์ค๋ฆ~
- ์๋ฆ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ์ผํญ์ฐ์ฐ์
- ์๊ณ ๋ฆฌ์ฆ
- !x.includes()
- ๊ฐ์ฐ์ค์ ๊ณต์
- for๋ฌธ
- JavaScript
- ์ด๋ ค์ด๋ฐใ ใ
- array.reduce()
- Promise.all()
- Math.min
- ํ๋ ฌ...
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง
- Ajax๋?
- async-await
- ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์๋ฐฐ๊ฒฝ
- ES6 ๋ธ๋ผ์ฐ์ ์ง์ ํํฉ
- .split()
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๊ตฌ๋ฌธ๊ณผ ์๋ฏธ
- a && b
- arr.push()
- for๋ฐ๋ณต๋ฌธ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ECMAScript
- ํ๋ก๊ทธ๋๋ฐ์ด๋
- ํ๋ก๊ทธ๋๋จธ์ค ๊ณต์ ์ฐ์ฑ
- ๋ฐฐ์ด ์ต์๊ฐ
- Today
- Total
Ming's develop story
๊ณต์ ์ฐ์ฑ - ํ๋ก๊ทธ๋๋จธ์ค ๋ณธ๋ฌธ
๋ฌธ์ ์ค๋ช
์ง๋๋ค๋๋ ๊ธธ์ 'O', ์ฅ์ ๋ฌผ์ 'X'๋ก ๋ํ๋ธ ์ง์ฌ๊ฐํ ๊ฒฉ์ ๋ชจ์์ ๊ณต์์์ ๋ก๋ด ๊ฐ์์ง๊ฐ ์ฐ์ฑ ์ ํ๋ คํฉ๋๋ค. ์ฐ์ฑ ์ ๋ก๋ด ๊ฐ์์ง์ ๋ฏธ๋ฆฌ ์ ๋ ฅ๋ ๋ช ๋ น์ ๋ฐ๋ผ ์งํํ๋ฉฐ, ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ฃผ์ด์ง๋๋ค.
["๋ฐฉํฅ ๊ฑฐ๋ฆฌ", "๋ฐฉํฅ ๊ฑฐ๋ฆฌ" … ]
์๋ฅผ ๋ค์ด "E 5"๋ ๋ก๋ด ๊ฐ์์ง๊ฐ ํ์ฌ ์์น์์ ๋์ชฝ์ผ๋ก 5์นธ ์ด๋ํ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ก๋ด ๊ฐ์์ง๋ ๋ช ๋ น์ ์ํํ๊ธฐ ์ ์ ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๋จผ์ ํ์ธํฉ๋๋ค.
์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ๋ ๊ณต์์ ๋ฒ์ด๋๋์ง ํ์ธํฉ๋๋ค.์ฃผ์ด์ง ๋ฐฉํฅ์ผ๋ก ์ด๋ ์ค ์ฅ์ ๋ฌผ์ ๋ง๋๋์ง ํ์ธํฉ๋๋ค.
์ ๋ ๊ฐ์ง์ค ์ด๋ ํ๋๋ผ๋ ํด๋น๋๋ค๋ฉด, ๋ก๋ด ๊ฐ์์ง๋ ํด๋น ๋ช ๋ น์ ๋ฌด์ํ๊ณ ๋ค์ ๋ช ๋ น์ ์ํํฉ๋๋ค.๊ณต์์ ๊ฐ๋ก ๊ธธ์ด๊ฐ W, ์ธ๋ก ๊ธธ์ด๊ฐ H๋ผ๊ณ ํ ๋, ๊ณต์์ ์ข์ธก ์๋จ์ ์ขํ๋ (0, 0), ์ฐ์ธก ํ๋จ์ ์ขํ๋ (H - 1, W - 1) ์ ๋๋ค.
๊ณต์์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด park, ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช ๋ น์ด ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด routes๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ก๋ด ๊ฐ์์ง๊ฐ ๋ชจ๋ ๋ช ๋ น์ ์ํ ํ ๋์ธ ์์น๋ฅผ [์ธ๋ก ๋ฐฉํฅ ์ขํ, ๊ฐ๋ก ๋ฐฉํฅ ์ขํ] ์์ผ๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๊ณต์์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด
park, ๋ก๋ด ๊ฐ์์ง๊ฐ ์ํํ ๋ช ๋ น์ด ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด routes๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ก๋ด ๊ฐ์์ง๊ฐ ๋ชจ๋ ๋ช ๋ น์ ์ํ ํ ๋์ธ ์์น๋ฅผ [์ธ๋ก ๋ฐฉํฅ ์ขํ, ๊ฐ๋ก ๋ฐฉํฅ ์ขํ] ์์ผ๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
ํ๋ก๊ทธ๋๋จธ์ค/๊ณต์ ์ฐ์ฑ
์ ์ถ๋ ฅ ์
park | routes | result |
["SOO","OOO","OOO"] | ["E 2","S 2","W 1"] | [2,1] |
๋ด ํ์ด
function computeRobotPosition(park, routes) {
let robotPosition = [];
const obstacle = new Set();
for (let i = 0; i < park.length; i++) {
for (let j = 0; j < park[i].length; j++) {
if (park[i][j] === "X") {
obstacle.add(`${i},${j}`);
}
if (park[i][j] === "S") {
const startPoint = [i, j];
robotPosition = startPoint;
}
}
}
const directions = {
E: [0, 1],
W: [0, -1],
S: [1, 0],
N: [-1, 0],
};
const canMove = (direction, distance) => {
let [y, x] = robotPosition;
const [dy, dx] = directions[direction];
for (let i = 1; i <= distance; i++) {
y += dy;
x += dx;
const isOverTheOutline =
y < 0 || y >= park.length || x < 0 || x >= park[0].length;
if (isOverTheOutline) {
return false;
}
const hasObstacleOnTheRoute = obstacle.has(`${y},${x}`);
if (hasObstacleOnTheRoute) {
return false;
}
}
return true;
};
for (const route of routes) {
const [direction, distance] = route.split(" ");
const dist = parseInt(distance);
if (canMove(direction, dist)) {
const [dy, dx] = directions[direction];
robotPosition = [
robotPosition[0] + dy * dist,
robotPosition[1] + dx * dist,
];
}
}
return robotPosition;
}
์ฐ์ ๋ค์๋ ์๊ฐ์ ์์ ์ง์ ๊ณผ ์ฅ์ ๋ฌผ ์์น ์ขํ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ๊ณ ๊ทธ๊ฑธ ์ํด์ park๋ฅผ ์ํํ์๊ณ , ์ด์งํผ ์ฅ์ ๋ฌผ ์์น๊ฐ ์ด๋์ผ์ง ๋ชจ๋ฅด๋ park ์ ์ฒด๋ฅผ ์ํํด์ผ ํ๋ค๊ณ ์๊ฐํ์ฌ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ ์์นํ๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ํ ์นธ์ฉ ์ด๋ํ๋ฉฐ(canMove์์ ๋ฐ๋ณต๋ฌธ์ผ๋ก) ์ฅ์ ๋ฌผ์ด๋ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋์ง ์ฒดํฌํ๋ ๋ฐฉ์์ด ์๋์๊ณ , routes ์์ ํ๋์ ์์๋ณ๋ก ์ด๋์ ์ํค๋ฉด์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ด ๊ฒฝ๊ณ๋ฅผ ์ง๋์๋์ง, ๊ฒฝ๊ณ๋ฅผ ๋์๋์ง๋ฅผ ์ฒดํฌํ๋๋ฐ ๋ก์ง์ด ์ ์ ๋ ๋ณต์กํด์ก๊ณ ๋ญ๊ฐ ์๋ชป๋จ์ ๋๊ผ๋ค.
๋ค์ ์ฒ์๋ถํฐ ์ ๊ทผํ๋ค๋ ์๊ฐ์ผ๋ก directions๋ฅผ ์ง์ ํ๊ณ routes๋ฅผ ์ํํ๋ฉฐ ์กฐ๊ฑด(์ฅ์ ๋ฌผ๊ณผ ๊ฒฝ๊ณ)๋ง ํต๊ณผํ๋ฉด ์ด๋์ํค๋ ๋ก์ง์ ๋ง๋ค๊ธฐ๋ก ํ๋ค.
๊ทธ๋ ๊ฒํด์ canMove ํจ์ ๋ด์์ distance๋งํผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํ ์นธ์ฉ ์ด๋ํ๋ฉฐ ์ฅ์ ๋ฌผ๊ณผ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋์ง ์ฒดํฌํ๊ณ , ๋ฐ๋ณต๋ฌธ์์ ๊ฑธ๋ฆฌ์ง ์๋๋ค๋ฉด robotPosition์ ๋ฐ๊ฟ์ฃผ๊ณ ๋ค์ ๋ช ๋ น์ ์ํํ ์ ์๊ฒ ํ๋ค.
โป Set์ ์ฌ์ฉํ ์ด์ : ์ฒ์์๋ Array๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์ด์ ๋ ์๊ฐ ๋ณต์ก๋๋ ๊ณ ๋ ค๋ฅผ ํ์๋ผ๋ ์๊ฐ์ ๋ด ๊ธฐ์ต ์ ํธ์ ํฌ๋ฏธํ๊ฒ ๋จ์์๋ Set ๊ฐ์ฒด์ ๋ํด ์ฐพ์๋ณด๊ณ ์ฐ๊ฒ ๋์๋ค. has ๋ฉ์๋๋ ๋ฐฐ์ด์ length์ size๊ฐ ๊ฐ์ ๋ includes ๋ฉ์๋๋ณด๋ค ํ๊ท ์ ์ผ๋ก ๋น ๋ฅด๋ค๊ณ ํ๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด
function solution(park, routes) {
const dirs = { E: [0, 1], W: [0, -1], S: [1, 0], N: [-1, 0] };
let [x, y] = [0, 0];
for (let i = 0; i < park.length; i++) {
if (park[i].includes('S')) {
[x, y] = [i, park[i].indexOf('S')];
break;
}
}
routes.forEach((route) => {
const [r, n] = route.split(' ');
let [nx, ny] = [x, y];
let cnt = 0;
while (cnt < n) {
[nx, ny] = [nx + dirs[r][0], ny + dirs[r][1]];
if (!park[nx] || !park[nx][ny] || park[nx][ny] === 'X') break;
cnt++;
}
if (cnt == n) [x, y] = [nx, ny];
});
return [x, y];
}
dirs๋ฅผ ์ ์ธ ํด์ฃผ์๊ณ park๋ฅผ ์ํํ๋ฉฐ start point ๋ฅผ ์ง์ ํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ routes ๋ฅผ forEach๋ก ์ํํ๋ฉฐ r ์ด๋ผ๋ ๋ฐฉํฅ๊ณผ n์ด๋ผ๋ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ์ถํ๊ณ , cnt๋ฅผ 0์ผ๋ก ์ ์ธ ํ while ๋ฌธ์ผ๋ก ๋งค ๋ฐ๋ณต๋ง๋ค cnt ๋ฅผ ์ถ๊ฐํ๋ฉฐ n๋ฒ๋งํผ ์คํ ๋ ์ ์๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต๋ฌธ ๋ด์์๋ nx์ ny๋ฅผ ์ง์ ๋ ๋ฐฉํฅ(= r)์ ๋ง์ถฐ ํ ์นธ์ฉ ์ด๋์์ผฐ๋ค.
!park[nx] : ์ธ๋ก์ถ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ฉด park[nx]๊ฐ undfined ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ !๋ฅผ ๋ถ์ฌ ๊ฐ๋ก์ถ ๊ฒฝ๊ณ๋ฅผ ์ฒดํฌํ์๋ค.
!park[nx][ny] : ๊ฐ๋ก์ถ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋์ง๋ ์์ ๊ฐ์ ์๋ฆฌ๋ก ์ฒดํฌํ์๋ค.
park[nx][ny] === 'X' : ์ด๋ํ ์ขํ์ ๊ฐ์ด X๋ฉด break๊ฐ ๋๋๋ก ํ์๋ค.
๋ฐ๋ณต๋ฌธ์ด ์คํ๋๋ ๋์ ์กฐ๊ฑด์ ํต๊ณผํ์ ๊ฒฝ์ฐ cnt๊ฐ ์ฆ๊ฐํ ํ ๋ฐ ์ฆ๊ฐํ cnt๊ฐ ์ด๋๊ฑฐ๋ฆฌ n๊ณผ ์ผ์นํ๋ค๋ฉด ์ฒ์ ์ง์ ํ๋ [x, y]์ ์ด๋ํ ์ขํ [nx, ny]๋ฅผ ํ ๋นํ๊ณ ๋ชจ๋ ๋ก์ง์ด ๋ค ์คํ๋๊ณ ๋์์ [x, y]๊ฐ์ returnํ๋ ๋ฐฉ์์ด์๋ค.
์ฅ์ ๋ฌผ์ ๊ธฐ๋กํด๋๊ณ ์ฒดํฌํด์ผ ํ๋ค๊ณ ์๊ฐํ์๋๋ฐ ์ด๋ ๊ฒ ํ ์นธ์ฉ ์์ง์ด๋ฉด์ ์ฒดํฌํด๋ ๋๋ค๋ ๊ฒ์ ์๊ฒ๋๋ค...
'D E V E L O P ๐ป > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณผ์ผ ์ฅ์ - ํ๋ก๊ทธ๋๋จธ์ค (0) | 2025.02.17 |
---|---|
๋ง์น ํ๊ธฐ - ํ๋ก๊ทธ๋๋จธ์ค (0) | 2025.02.10 |
์๊ณ ๋ฆฌ์ฆ - ์ง์ฌ๊ฐํ ๋ณ์ฐ๊ธฐ (0) | 2022.05.24 |
์๊ณ ๋ฆฌ์ฆ - ํธ๋ํฐ ๋ฒํธ ๊ฐ๋ฆฌ๊ธฐ (0) | 2022.05.24 |
์๊ณ ๋ฆฌ์ฆ - x๋งํผ ๊ฐ๊ฒฉ์ด ์๋ n๊ฐ์ ์ซ์ (0) | 2022.05.23 |