๐ŸŽฏ[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [1์ฐจ] ํ”„๋ Œ์ฆˆ4๋ธ”๋ก

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋‡Œ์ •์ง€๊ฐ€ ๋งŽ์ด์™”๋‹ค,,, ๋ถ€์กฑํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹ค๋ ฅ์œผ๋กœ ์ตœ๋Œ€ํ•œ ๋ณด๊ธฐ์‰ฝ๊ฒŒ ์ฃผ์„์„ ๋‹ฌ์•„๋ณด์•˜์Œ..

๋ฌธ์ œ ์‹œ์ž‘

ํ”„๋ Œ์ฆˆ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)์„ ์˜๋ฏธํ•œ๋‹ค

์ž…๋ ฅ์œผ๋กœ ๋ธ”๋ก์˜ ์ฒซ ๋ฐฐ์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ง€์›Œ์ง€๋Š” ๋ธ”๋ก์€ ๋ชจ๋‘ ๋ช‡ ๊ฐœ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•˜๋ผ.

์ฝ”๋“œ ์‹œ์ž‘

function solution(m, n, board) {
    // ๊ฐ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋ชจ๋‘ ๋ถ„๋ฆฌํ•ด์„œ ๋ฐฐ์—ด์— ๋‹ด์•„์คŒ
    let arr = board.map(a => a.split(""))
    while(true) {
        // ํ•œ๋ฒˆ์— ์ง€์šฐ๊ธฐ ์œ„ํ•ด ์ง€์›Œ์•ผํ•  ์ขŒํ‘œ๋ฅผ ๊ธฐ๋ก
    const coords = []
    for(let y = 0 ; y < arr.length-1 ; y ++) {
        for(let x = 0 ; x < arr[y].length -1 ; x ++) {
            // ๋น„์–ด์žˆ๋Š” ์ž๋ฆฌ๋ผ๋ฉด ๊ฑด๋„ˆ๋œ€
            if(arr[y][x] === null) continue
            // ์ €์žฅ์†Œ์˜ ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด ์•„๋žซ์ค„๊ณผ ๊ฒ€์‚ฌํ•˜์—ฌ 2 * 2 ์กฐ๊ฑด ๊ฒ€์‚ฌ
            if(arr[y][x] === arr[y][x+1] && arr[y][x] === arr[y+1][x] && arr[y][x] === arr[y+1][x+1]) {
                // ์ขŒํ‘œ๋ฅผ ๋ฐฐ์—ด์— ์‚ฝ์ž…
                coords.push([y,x])
            }
        }
    }
    // ์•„๋ฌด๊ฒƒ๋„ ์ง€์šธ๊ฒƒ์ด ์—†๋‹ค๋ฉด ๋นˆ์นธ์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
    if(!coords.length) {
        return arr.flat(Infinity).filter(el => el === null).length
    }
    
    // ์ €์žฅ๋œ ์ขŒํ‘œ์˜ ๊ฐ’๋“ค์„ null๋กœ ๋ฐ”๊ฟˆ
    coords.forEach(a => {
        arr[a[0]][a[1]] = null
        arr[a[0]][a[1]+1] = null
        arr[a[0]+1][a[1]] = null
        arr[a[0]+1][a[1]+1] = null
    })
    // ๋ธ”๋ก ๋‚ด๋ฆฌ๊ธฐ
    for(let y = 0 ; y < arr.length ; y ++) {
        for(let x = 0 ; x < arr[y].length ; x ++) {
            // null ์˜ ๊ฐ’์„ ์ฐพ์•˜์„ ๋•Œ ์ฒซ์งธ ์ค„์ด ์•„๋‹ˆ๋ผ๋ฉด ์œ„์˜ ๊ฐ’๊ณผ ์ž๋ฆฌ๋ณ€๊ฒฝ ( ๋ธ”๋ก ๋‚ด๋ฆฌ๊ธฐ )
            if(arr[y][x] === null && y !== 0) {
                if(arr[y-1][x] !== null) {
                    arr[y][x] = arr[y-1][x]
                    arr[y-1][x] = null
                    y = y-1
                    x = -1
                }
            }
        }
    } 
    }
}

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ