[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ ์ฆ 4๋ธ๋ก (javascript)
https://programmers.co.kr/learn/courses/30/lessons/17679
์ฝ๋ฉํ ์คํธ ์ฐ์ต - [1์ฐจ] ํ๋ ์ฆ4๋ธ๋ก
ํ๋ ์ฆ4๋ธ๋ก ๋ธ๋ผ์ธ๋ ๊ณต์ฑ๋ฅผ ํต๊ณผํ ์ ์ ์ฌ์ ๋ผ์ด์ธ์ ์ ๊ท ๊ฒ์ ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค. ์ด๋ฒ์ ์ถ์ํ ๊ฒ์ ์ ๋ชฉ์ "ํ๋ ์ฆ4๋ธ๋ก". ๊ฐ์ ๋ชจ์์ ์นด์นด์คํ๋ ์ฆ ๋ธ๋ก์ด 2×2 ํํ๋ก 4๊ฐ๊ฐ ๋ถ
programmers.co.kr
๋ฌธ์ ์ค๋ช
ํ๋ ์ฆ4๋ธ๋ก
๋ธ๋ผ์ธ๋ ๊ณต์ฑ๋ฅผ ํต๊ณผํ ์ ์
์ฌ์ ๋ผ์ด์ธ์ ์ ๊ท ๊ฒ์ ๊ฐ๋ฐ ์
๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค. ์ด๋ฒ์ ์ถ์ํ ๊ฒ์ ์ ๋ชฉ์ "ํ๋ ์ฆ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๊ฐ ์ฌ์ฉ๋๋ค.
์ถ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋ช ๊ฐ์ ๋ธ๋ก์ด ์ง์์ง์ง ์ถ๋ ฅํ๋ผ.
์ ์ถ๋ ฅ ์์
mnboardanswer
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) {
let boardArr = [];
let count = 0;
let arr = [];
for(let i = 0; i < board.length; i++) boardArr.push(board[i].split(""));
// 2์ฐจ์ ๋ฐฐ์ด ์ ์ธ
while(true){
for(let i = 0; i < m; i++){
for(let j = 0; j < n; j++){
if(i !== m - 1 && j !== n-1 && boardArr[i][j] !== 0 && (boardArr[i][j].repeat(3) ===
boardArr[i][j+1] + boardArr[i+1][j] + boardArr[i+1][j+1])){
arr.push({x : j, y : i, value : boardArr[i][j]});
arr.push({x : j+1, y : i, value : boardArr[i][j]});
arr.push({x : j, y : i+1, value : boardArr[i][j]});
arr.push({x : j+1, y : i+1, value : boardArr[i][j]});
}
}
}
if(arr.length === 0) break; // ์ฌ๋ผ์ง์ง ์์ผ๋ฉด ๋
for(let i = 0; i < arr.length; i++){
for(let j = 0; j < arr.length; j++){
if(i !== j && arr[i].x === arr[j].x && arr[i].y === arr[j].y && arr[i].value === arr[j].value)
arr.splice(i, 1);
}
} // ๊ฐ์ฒด ์ค๋ณต ์ ๊ฑฐ(ex ํ
์คํธ ์ผ์ด์ค 2๋ฒ ์งธ ๋ผ์ด์ธ)
count += arr.length;
for(let i = 0; i < arr.length; i++) {
boardArr[arr[i].y][arr[i].x] = 0;
}
// ๊ฐ์ฒด์ ๊ฐ์ 0 ๋์
for(let i = m-1; i >= 0; i--){
for(let j = 0; j < n; j++){
if(boardArr[i][j] === 0){
for(let k = i - 1; k >= 0; k--){
if(boardArr[k][j] !== 0){
boardArr[i][j] = boardArr[k][j];
boardArr[k][j] = 0;
break;
}
}
}
}
} // ๊ฐ์ ์๋๋ก ๋ฐ
arr = []; // arr ์ด๊ธฐํ
}
return count;
}
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ชป ์ฐพ์์ ๋ฌด์ง์ฑ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋ฐ๋ณตํด๋ฒ๋ ธ๋ค.. ํจ์จ์ฑ ๋ฌธ์ ๋ ์๋์์ง๋ง ์ข์ ์ฝ๋๊ฐ ์๋ ๊ฑด ํ์คํ๋ค
=> ํจ์๋ก ๊ตฌ๋ถํ์ฌ ํจ์จ์ ์ผ๋ก ๋ค์ ํ์์
https://parkparkpark.tistory.com/28
[ํ๋ก๊ทธ๋๋จธ์ค] 1์ฐจ ํ๋ ์ฆ4๋ธ๋ก (js)
https://programmers.co.kr/learn/courses/30/lessons/17679/solution_groups?language=javascript ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋ก..
parkparkpark.tistory.com