๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/ใ„ด problems

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 2018 KAKAO BLIND RECRUITMENT : ํ”„๋ Œ์ฆˆ4๋ธ”๋ก

by vodkassi 2021. 10. 6.
728x90

๐Ÿ“ ๋ฌธ์ œ ์„ค๋ช…

 

๋ธ”๋ผ์ธ๋“œ ๊ณต์ฑ„๋ฅผ ํ†ต๊ณผํ•œ ์‹ ์ž… ์‚ฌ์› ๋ผ์ด์–ธ์€ ์‹ ๊ทœ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ์— ์ถœ์‹œํ•  ๊ฒŒ์ž„ ์ œ๋ชฉ์€ "ํ”„๋ Œ์ฆˆ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 ์ฒ˜๋ฆฌ๋œ ๊ฐ’์„ ๋ฐฐ์—ด์˜ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค. 

๋Œ“๊ธ€