๐ ๋ฌธ์ ์ค๋ช
๋ธ๋ผ์ธ๋ ๊ณต์ฑ๋ฅผ ํต๊ณผํ ์ ์
์ฌ์ ๋ผ์ด์ธ์ ์ ๊ท ๊ฒ์ ๊ฐ๋ฐ ์
๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค. ์ด๋ฒ์ ์ถ์ํ ๊ฒ์ ์ ๋ชฉ์ "ํ๋ ์ฆ4๋ธ๋ก".
๊ฐ์ ๋ชจ์์ ์นด์นด์คํ๋ ์ฆ ๋ธ๋ก์ด 2×2 ํํ๋ก 4๊ฐ๊ฐ ๋ถ์ด์์ ๊ฒฝ์ฐ ์ฌ๋ผ์ง๋ฉด์ ์ ์๋ฅผ ์ป๋ ๊ฒ์์ด๋ค.
๋ง์ฝ ํ์ด ์์ ๊ฐ์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ, ๋ผ์ด์ธ์ด 2×2๋ก ๋ฐฐ์น๋ 7๊ฐ ๋ธ๋ก๊ณผ ์ฝ์ด 2×2๋ก ๋ฐฐ์น๋ 4๊ฐ ๋ธ๋ก์ด ์ง์์ง๋ค. ๊ฐ์ ๋ธ๋ก์ ์ฌ๋ฌ 2×2์ ํฌํจ๋ ์ ์์ผ๋ฉฐ, ์ง์์ง๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ 2×2 ๋ชจ์์ด ์ฌ๋ฌ ๊ฐ ์๋ค๋ฉด ํ๊บผ๋ฒ์ ์ง์์ง๋ค.
๋ธ๋ก์ด ์ง์์ง ํ์ ์์ ์๋ ๋ธ๋ก์ด ์๋๋ก ๋จ์ด์ ธ ๋น ๊ณต๊ฐ์ ์ฑ์ฐ๊ฒ ๋๋ค.
๋ง์ฝ ๋น ๊ณต๊ฐ์ ์ฑ์ด ํ์ ๋ค์ 2×2 ํํ๋ก ๊ฐ์ ๋ชจ์์ ๋ธ๋ก์ด ๋ชจ์ด๋ฉด ๋ค์ ์ง์์ง๊ณ ๋จ์ด์ง๊ณ ๋ฅผ ๋ฐ๋ณตํ๊ฒ ๋๋ค.
์ ์ด๊ธฐ ๋ฐฐ์น๋ฅผ ๋ฌธ์๋ก ํ์ํ๋ฉด ์๋์ ๊ฐ๋ค.
TTTANT
RRFACC
RRRFCC
TRRRAA
TTMMMF
TMMTTJ
๊ฐ ๋ฌธ์๋ ๋ผ์ด์ธ(R), ๋ฌด์ง(M), ์ดํผ์น(A), ํ๋ก๋(F), ๋ค์ค(N), ํ๋ธ(T), ์ ์ด์ง(J), ์ฝ(C)์ ์๋ฏธํ๋ค. ์ ๋ ฅ์ผ๋ก ๋ธ๋ก์ ์ฒซ ๋ฐฐ์น๊ฐ ์ฃผ์ด์ก์ ๋, ์ง์์ง๋ ๋ธ๋ก์ ๋ชจ๋ ๋ช ๊ฐ์ธ์ง ํ๋จํ๋ ํ๋ก๊ทธ๋จ์ ์ ์ํ๋ผ.
๐ ์
๋ ฅ ํ์
- ์ ๋ ฅ์ผ๋ก ํ์ ๋์ด m, ํญ n๊ณผ ํ์ ๋ฐฐ์น ์ ๋ณด board๊ฐ ๋ค์ด์จ๋ค.
- 2 โฆ n, m โฆ 30
- board๋ ๊ธธ์ด n์ธ ๋ฌธ์์ด m๊ฐ์ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋ค. ๋ธ๋ก์ ๋ํ๋ด๋ ๋ฌธ์๋ ๋๋ฌธ์ A์์ Z๊ฐ ์ฌ์ฉ๋๋ค.
๐ ์ถ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋ช ๊ฐ์ ๋ธ๋ก์ด ์ง์์ง์ง ์ถ๋ ฅํ๋ผ.
๐ ์
์ถ๋ ฅ ์
m | n | board | answer |
4 | 5 | ["CCBDE", "AAADE", "AAABF", "CCBBF"] | 14 |
6 | 6 | ["TTTANT", "RRFACC", "RRRFCC", "TRRRAA", "TTMMMF", "TMMTTJ"] | 15 |
์ ์ถ๋ ฅ ์์ 1์ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ์๋ A ๋ธ๋ก 6๊ฐ๊ฐ ์ง์์ง๊ณ , ๋ ๋ฒ์งธ์๋ B ๋ธ๋ก 4๊ฐ์ C ๋ธ๋ก 4๊ฐ๊ฐ ์ง์์ ธ, ๋ชจ๋ 14๊ฐ์ ๋ธ๋ก์ด ์ง์์ง๋ค.
์ ์ถ๋ ฅ ์์ 2๋ ๋ณธ๋ฌธ ์ค๋ช ์ ์๋ ๊ทธ๋ฆผ์ ์ฎ๊ธด ๊ฒ์ด๋ค. 11๊ฐ์ 4๊ฐ์ ๋ธ๋ก์ด ์ฐจ๋ก๋ก ์ง์์ง๋ฉฐ, ๋ชจ๋ 15๊ฐ์ ๋ธ๋ก์ด ์ง์์ง๋ค.
๐ ๋์ ์๋ฃจ์
function solution(m, n, board) {
// 1. board 90๋ ํ์
let arr = [];
for (let i = 0; i < n; i++) {
const temp = board.map(el => el[i])
arr.unshift(temp);
}
let indices = new Set;
let count = 0;
while (true) {
// 2. 2*2 ๋ธ๋ก ์ธ๋ฑ์ค ์ฐพ์์ set ์ ๋ณด๊ด
for (let i = 0; i < arr.length - 1; i++) {
const row1 = arr[i];
const row2 = arr[i+1];
for (let j = 0; j < row1.length - 1; j++) {
if (row1[j] && row1[j] === row1[j+1] && row1[j] === row2[j] && row2[j] === row2[j+1]) {
indices.add(`${i},${j}`);
indices.add(`${i},${j+1}`);
indices.add(`${i+1},${j}`);
indices.add(`${i+1},${j+1}`);
}
}
}
if (!indices.size) {
break;
}
// 3. set ์ ํฌํจ๋ ์ธ๋ฑ์ค ๋ด์ฉ ์ ๊ฑฐ (null)
for (let el of indices) {
const temp = el.split(',');
arr[temp[0]][temp[1]] = null;
}
// 4. ๋น ๊ณต๊ฐ์ ์ฑ์ด board ๋ง๋ค๊ธฐ
arr = arr.map(el => {
const temp = el.filter(value => value)
while (temp.length < m) {
temp.unshift(null)
}
return temp;
})
count += indices.size;
indices = new Set;
}
return count;
}
๐ ์ ๊ทผ ๋ฐฉ๋ฒ
์ฃผ์ด์ง๋ board ์๋ณธ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด 2*2 ๋ธ๋ก์ด ํฐ์ง๊ณ ๋๋ฉด ๋จ์ ์๋ ๋ธ๋ก๋ค์ ์์ผ๋ก ๋ก๊ฒจ์ค๋ ์์ ์ด ๋ฒ๊ฑฐ๋ก์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. board ๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ๋ก๊ฒจ์ค๋ ์์ ์ ์ํํ ์์๋ค์ด ๋ค ๊ฐ์ ์ค์ ๋ฐฐ์นํ๋ค๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง ๊ฒ์ด๋ผ๋ ์๊ฐ์ ์ฐ์ board ๋ฅผ ์ผ์ชฝ์ผ๋ก 90๋ ํ์ ํ๋ค.
2*2 ๋ธ๋ก์ ์ฐพ์ ๋๋ง๋ค ์ธ๋ฑ์ค๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ์ฌ Set ์ ๋ณด๊ดํ๋ค. Set ์ ์ฌ์ฉํ ์ด์ ๋ ์ค๋ณต๊ฐ์ ๊ฑธ๋ฌ๋ธ ํฌ๊ธฐ๋ฅผ ํ ๋ฒ์ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ๋ฌธ์์ด๋ก ๋ณด๊ดํ ์ด์ ๋ ๋ฐฐ์ด์ reference type ์ด๋ฏ๋ก ๋จ์ ๋น๊ต๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ i, j ๊ฐ์ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ ๋์ค์ ์ฌ๋ผ์ด์ฑํ์ฌ ์ถ์ถํ ์ ์๋๋ก ํ๋ค.
2*2 ๋ธ๋ก์ ๋ชจ๋ ์ฐพ์ ์ธ๋ฑ์ค๋ฅผ Set ์ ๋ณด๊ดํ ๋ค, Set ์ ์๋ ๋ชจ๋ ์์๋ค์ ์ํํ๋ฉฐ ์ธ๋ฑ์ค์ ๋ง๋ ๊ฐ์ null ๋ก ๋ฐ๊ฟ์ฃผ์๊ณ , ์ดํ null ์ฒ๋ฆฌ๋ ๊ฐ์ ๋ฐฐ์ด์ ์์ผ๋ก ์ด๋์ํค๋ ์์ ์ ์ํํ๋ค.
๋๊ธ