[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”„๋ Œ์ฆˆ4๋ธ”๋ก /ํŒŒ์ด์ฌ /Python /2018 KAKAO BLIND RECRUITMENT
Algorithm/Programmers

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

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’กsolutions )

๐Ÿ’ฌ 2X2 ๋ธ”๋ก์ด ์‚ฌ๋ผ์ง€๊ณ  ๋‚˜๋จธ์ง€ ์œ„์— ์žˆ๋Š” ๋ธ”๋ก์ด ๋–จ์–ด์ ธ ๋นˆ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๋Š” ๋กœ์ง์„ ๋ณด๋‹ค ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ–‰์—ด์„ ๋’ค์ง‘์—ˆ๋‹ค => zip๊ณผ list๋กœ์˜ ๋งคํ•‘์„ ํ†ตํ•ด ์ „์น˜ํ–‰๋ ฌ ๋งŒ๋“ค๊ธฐ

๐Ÿ’ฌ four_blocks ํ•จ์ˆ˜์—์„œ 2X2 ๋ธ”๋ก์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์œ„์น˜๋ฅผ visit_set์— ๋‹ด์•„๋‘๋Š”๋ฐ, ๊ฐ™์€ ๋ธ”๋ก์ด ์—ฌ๋Ÿฌ 2X2์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด set ์ž๋ฃŒํ˜• ํ™œ์šฉ

๐Ÿ’ฌ ๋ชจ๋“  2x2์˜ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์€ ํ›„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ 1๋กœ ํ‘œ์‹œํ•ด์ฃผ๊ณ  -> ํ–‰๋ ฌ์˜ ํ•œ ํ–‰๋งˆ๋‹ค ๋Œ์•„๊ฐ€๋ฉฐ 1์˜ ๊ฐœ์ˆ˜๋งŒํผ '_'๋กœ ์น˜ํ™˜ํ•˜๊ณ  ๋งจ ์•ž์— ๋ถ™์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•œ๋‹ค. ์ฆ‰, ๋‚˜๋จธ์ง€ ๋ธ”๋ก๋“ค์ด ์„œ๋กœ ๋ถ™์–ด ์žˆ๊ฒŒ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ.  

 

๐ŸŽซcode )

def four_blocks(m, n, board):
    visit_set = set()
    for i in range(1, n):
        for j in range(1, m):
            if board[i][j] == board[i-1][j-1] == board[i-1][j] == board[i][j-1] != '_':
                    visit_set |= set([(i, j), (i-1, j-1), (i-1, j), (i, j-1)])
                    
    # 2x2๊ฐ€ ๋˜๋Š” ์• ๋“ค์€ 1๋กœ ํ‘œ์‹œ              
    for i, j in visit_set:
        board[i][j] = 1
        
    # 1์ธ ์• ๋“ค์€ '_'๋กœ ๋Œ€์ฒดํ•˜๊ณ  ๋งจ ์•ž์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌํ˜„
    for idx, row in enumerate(board):
        tmp = ['_']*row.count(1)
        board[idx] = tmp + [b for b in row if b != 1]
    return len(visit_set)


def solution(m, n, board):
    answer = 0
    board = list(map(list, zip(*board))) # ํ–‰์—ด ๋’ค์ง‘๊ธฐ
    while True:
        res = four_blocks(m, n, board)
        if res == 0:
            return answer
        answer += res

 

๐Ÿ“Œ description )

๋ฌธ์ œ์ถœ์ฒ˜ : programmers.co.kr/learn/courses/30/lessons/17679?language=python3

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - [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๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

์ถœ๋ ฅ ํ˜•์‹

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ํŒ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ๋ช‡ ๊ฐœ์˜ ๋ธ”๋ก์ด ์ง€์›Œ์งˆ์ง€ ์ถœ๋ ฅํ•˜๋ผ.

๋ฐ˜์‘ํ˜•