์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ์ฝํ
- JavaScript
- ์ด๋ถํ์
- DP
- ๋ธ๋ฃจํธํฌ์ค
- ๋ฆฌ๋์ค ํดํท
- svgํ์ผ ๋ค๋ฃจ๊ธฐ
- ๋์ ๊ณํ๋ฒ
- TypeScript
- ์นด์นด์ค์ฑ์ฉ
- ์ฝ๋ ํฌ๋ฉง
- js
- ์นด์นด์ค
- Node.js
- ๋๋๊ทธ ์ด๋ฒคํธ
- ๋ฐฑ์ค
- ์ฝ๋ฉํ ์คํธ
- ๊ณผ์ ํ ์คํธ
- icecandidate
- router v6
- React
- custom hook
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- ์ด๋ฏธ์ง ์์
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก๊ทธ๋๋จธ์ค
- Redux toolkit
- ์๋ฐ์คํฌ๋ฆฝํธ
- Today
- Total
๐ฅ dev-ruby
[ํ๋ก๊ทธ๋๋จธ์ค][Lv.2] [1์ฐจ] ํ๋ ์ฆ 4๋ธ๋ก - ์๋ฐ์คํฌ๋ฆฝํธ | 2018 KAKAO BLIND RECRUITMENT ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค][Lv.2] [1์ฐจ] ํ๋ ์ฆ 4๋ธ๋ก - ์๋ฐ์คํฌ๋ฆฝํธ | 2018 KAKAO BLIND RECRUITMENT
ruby_s 2021. 12. 28. 14:05๋ฌธ์ ์ค๋ช
ํ๋ ์ฆ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๊ฐ ์ฌ์ฉ๋๋ค.
์ถ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋ช ๊ฐ์ ๋ธ๋ก์ด ์ง์์ง์ง ์ถ๋ ฅํ๋ผ.
์ ์ถ๋ ฅ ์์
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) {
board = board.map(x => x.split(''));
while(true){
// ๋ธ๋ก ์ฐพ๊ธฐ
let blockIdxSet = [];
for(let i=0; i<m-1; i++){
for(let j=0; j<n-1; j++){
if(board[i][j]
&& board[i][j] === board[i+1][j]
&& board[i][j] === board[i][j+1]
&& board[i][j] === board[i+1][j+1]){
blockIdxSet.push([i, j, i+1, j+1]);
}
}
}
if(!blockIdxSet.length) return board.reduce((acc, curr) => acc + curr.filter((block) => !block).length, 0);
// ๋ธ๋ก ์ง์ฐ๊ธฐ
for(const block of blockIdxSet){
board[block[0]][block[1]] = 0;
board[block[0]][block[3]] = 0;
board[block[2]][block[1]] = 0;
board[block[2]][block[3]] = 0;
}
// ๋ธ๋ก ๋ด๋ฆฌ๊ธฐ
let count = 1;
while(count > 0){
count=0;
for(let i=1; i<m; i++){
for(let j=0; j<n; j++){
if(!board[i][j] && board[i-1][j]){ // 0์ผ ๊ฒฝ์ฐ
board[i][j] = board[i-1][j];
board[i-1][j] = 0;
count++;
}
}
}
}
}
}
์ข ํ๋ค์๋ค .. ์ฝ๋๊ฐ 30์ค์ด ๋๋ ๋ฌธ์ ๋ ์์ง ๋์๊ฒ ์ด๋ ต๋ค..
๋ถ๋ฐํ์
๋ธ๋ก ๋ด๋ฆฌ๋ ๋ถ๋ถ์ while๋ฌธ ์์ด ํ์ค ํ์ค์ฉ ๋ฐ๋ณตํ๋ฉด์ 0์ผ ๊ฒฝ์ฐ ์์๊บผ๋ฅผ ๋ด๋ฆฌ๋ ๋ฐฉ์์ ํํ๋๋ฐ,
๊ทธ๋ฌ๋ฉด ์ฌ๋ฌ๊ฐ๋ฅผ ํ๋ฒ์ ๋ด๋ ค์ผํ ๋ ํ๊ฐ๋ง ๋ด๋ ค๊ฐ๊ฒ๋๋ค..
๊ทธ๋์ while์์ count๋ก ํ๋จํด์ฃผ์ด ๊ณ์ ๋ฐ๋ณต์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค..!