ํฐ์คํ ๋ฆฌ ๋ทฐ
Algorithm/Programmers
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ๋ธ๋ก๊ฒ์
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 9. 16. 20:49[๋ฌธ์ ]
https://school.programmers.co.kr/learn/courses/30/lessons/42894
[ํ์ด]
์ด๊ธฐ ์ธํ
1. ๊ฐ ๋ธ๋ก์ผ๋ก ๋ง๋ค ์ ์๋ ์ง์ฌ๊ฐํ์ ์ขํ์ ๋ธ๋ก๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
- block ๋ฐฐ์ด์ [๋ธ๋ก๋ฒํธ, x1, y1, x2, y2]ํํ๋ก ์ ์ฅํฉ๋๋ค. ์ด๋ ํด๋น ๋ธ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(x1, y1) | (x1, y2) | |
(x2, y1) | (x2, y2) |
- block ๋ฐฐ์ด์ ์ด๋ index์ ๋ธ๋ก๋ฒํธ๊ฐ ์ ์ฅ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด Map์ ํ์ฉํด (key = ๋ธ๋ก๋ฒํธ, value = ํด๋น ๋ธ๋ก๋ฒํธ์ ์ ๋ณด๊ฐ ๋ด๊ธด block์ index) ํํ๋ก ์ ์ฅํฉ๋๋ค.
2. 1X1ํํ์ ๊ฒ์ ๋ธ๋ก์ ์ฑ์์ฃผ๋ dropBlock ํจ์๋ฅผ ์ ์ธํฉ๋๋ค.
- board๋ฅผ ํ์ํ๋ฉฐ ๊ฒ์ ๋ธ๋ก์ด ๋ค์ด๊ฐ ์ ์๋ ์์น์ -1์ ๋ฃ๋ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- ์ด๋, ๊ฐ ์ด๋ง๋ค 0~board.length-1๊น์ง ๋ธ๋ก์ด ์๋ ๊ณณ๊น์ง ์๋์ ๊ฐ์ด ๊ฐฑ์ ํฉ๋๋ค.
ํ์ด ๊ณผ์
1. removeBlock ํจ์๋ฅผ ํตํด ์ญ์ ํ ์ ์๋ ๋ธ๋ก์ ์ง์๋๋ค.
- ์ฐ์ , dropBlock ํจ์๋ฅผ ํธ์ถํ์ฌ 1X1ํํ์ ๊ฒ์ ๋ธ๋ก์ ์ฑ์๋๋ค.
- map์ ํ์ํ๋ฉฐ value(๋ธ๋ก ์ ๋ณด์ index) ๋ฅผ ํตํด block ๋ฐฐ์ด์์ [idx, x1, y1, x2, y2] ๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
- ๋ธ๋ก ์ ๋ณด๋ก ๋ง๋ค ์ ์๋ ์ง์ฌ๊ฐํ์ 0์ด๋ ๋ค๋ฅธ ๋ธ๋ก๋ฒํธ๊ฐ ์๋ค๋ฉด ์ง์ธ ์ ์์ผ๋ก ๊ฑด๋๋๋๋ค.
- ์ง์ธ ์ ์๋ ๋ธ๋ก์ด๋ผ๋ฉด isChange, answer, block์ ๊ฐฑ์ ํ๊ณ map์์ delete์ฐ์ฐ์ ํตํด ๋ธ๋ก๋ฒํธ๋ฅผ ์ง์๋๋ค. (๋ธ๋ก์ด ์๋ ์์น์ board๊ฐ์ 0์ผ๋ก ๊ฐฑ์ )
- isChange๊ฐ true๋ผ๋ฉด board๊ฐ ๊ฐฑ์ ๋์๊ธฐ ๋๋ฌธ์ removeBlock ํจ์๋ฅผ ์ฌ๊ทํธ์ถ ํฉ๋๋ค.
๋ฐ๋ผ์ removeBlock ํจ์์ ์ฌ๊ทํธ์ถ์ด ๋๋๋ฉด answer์ ์ง์์ง ๋ธ๋ก์ ๊ฐ์๊ฐ ์ ์ฅ๋ฉ๋๋ค.
[์ฝ๋]
function solution(board) {
var answer = 0;
// [idx, x1, y1, x2, y2];
const block = [];
const map = new Map();
for(let i=0;i<board.length;i++) {
for(let j=0;j<board.length;j++) {
if(board[i][j] > 0 && !map.has(board[i][j])) {
let x1, y1, x2, y2;
let idx = board[i][j];
x1 = i;
x2 = i;
y1 = Infinity;
y2 = -Infinity;
for(let k=i;k<board.length;k++) {
if(!board[k].includes(idx)) {
break;
}
x2 = k;
y1 = Math.min(y1, board[k].indexOf(idx));
y2 = Math.max(y2, board[k].lastIndexOf(idx));
}
map.set(idx, block.length);
block.push([idx, x1, y1, x2, y2]);
}
}
}
const dropBlock = () => {
for(let i=0;i<board.length;i++) {
for(let j=0;j<board.length;j++) {
if(board[j][i] > 0) {
break;
}
board[j][i] = -1;
}
}
}
const removeBlock = () => {
let isChange = false;
if(map.size === 0) {
return;
}
dropBlock();
map.forEach((value, key) => {
const [idx, x1, y1, x2, y2] = block[value];
let rm = true;
for(let i=x1;i<=x2;i++) {
for(let j=y1;j<=y2;j++) {
if(board[i][j] !== idx && board[i][j] >= 0) {
rm = false;
break;
}
}
}
// ์ง์ธ ์ ์๋ ๋ธ๋ก์
if(rm) {
isChange = true;
for(let i=x1;i<=x2;i++) {
for(let j=y1;j<=y2;j++) {
board[i][j] = 0;
}
}
map.delete(idx);
answer++;
}
})
if(isChange) {
removeBlock();
}
}
removeBlock();
return answer;
}
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ์ซ์ ๊ฒ์ (1) | 2022.09.30 |
---|---|
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ๋คํธ ๊ฒ์ (0) | 2022.09.18 |
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ (0) | 2022.09.11 |
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ์คํจ์จ (0) | 2022.09.05 |
[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ์ฑ๊ฒฉ ์ ํ ๊ฒ์ฌํ๊ธฐ (0) | 2022.09.01 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ฝ๋ฉํ ์คํธ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- http
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ์ด๋ถํ์
- ์๊ณ ๋ฆฌ์ฆ
- ํฌํฌ์ธํฐ
- ๋ฐฑ์ค javascript
- ํ๋กํ ์ฝ
- ์นด์นด์ค ์ธํด
- ํ๋กํผํฐ
- ๋ฐฑ์ค
- git
- ๋ ์์ปฌ ํ๊ฒฝ
- ๋คํธ์ํฌ
- ํ๋ก๊ทธ๋๋จธ์ค
- Baekjoon
- ๋์์ธ ํจํด
- JavaScript
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ์ ์ญ ๋ณ์
- fp
- map
- ์๋ฐ์คํฌ๋ฆฝํธ
- TDD
- ๋ฐฑ์ค node.js
- ์ด์์ฒด์
- ์๋ฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
๊ธ ๋ณด๊ดํจ