๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '[1์ฐจ] ํ”„๋ Œ์ฆˆ4๋ธ”๋ก' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 5. 26.
728x90
๋ฐ˜์‘ํ˜•
https://school.programmers.co.kr/learn/courses/30/lessons/17679
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

"""
๊ฐ ๋ฌธ์ž๋Š” ๋ผ์ด์–ธ(R), ๋ฌด์ง€(M), ์–ดํ”ผ์น˜(A), ํ”„๋กœ๋„(F),
๋„ค์˜ค(N), ํŠœ๋ธŒ(T), ์ œ์ด์ง€(J), ์ฝ˜(C)์„ ์˜๋ฏธํ•œ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ๋ธ”๋ก์˜ ์ฒซ ๋ฐฐ์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ง€์›Œ์ง€๋Š” ๋ธ”๋ก์€ 
๋ชจ๋‘ ๋ช‡ ๊ฐœ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•˜๋ผ.
"""
def solution(m, n, b):
    b = [[[0, b[y][x], 0] for y in range(m)] for x in range(n)]
    ispoped = True
    while ispoped:
        ispoped = False
        for y in range(n-1):
            for x in range(m-1):
                if sum([b[y][x][0], b[y][x+1][0], b[y+1][x][0], b[y+1][x+1][0]]) == 0:
                    if len(set([b[y][x][1], b[y][x+1][1], b[y+1][x][1], b[y+1][x+1][1]])) == 1:
                        ispoped = True
                        b[y][x][2], b[y][x+1][2], b[y+1][x][2], b[y+1][x+1][2] = 1, 1, 1, 1
            
        for y in range(n-1):
            for x in range(m-1):
                b[y][x][0], b[y][x+1][0], b[y+1][x][0], b[y+1][x+1][0] = b[y][x][2], b[y][x+1][2], b[y+1][x][2], b[y+1][x+1][2]
                
        for i in range(len(b)):
            b[i].sort(key=lambda x: -x[0])
            
    answer = 0
    for y in range(n):
            for x in range(m):
                answer += 1 if b[y][x][0] == 1 else 0
    return answer
   
"""
0~2๋‹จ๊ณ„๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ํ’€๊ณ  ์žˆ๋Š”๋ฐ 2๋‹จ๊ณ„ ์ค‘ ํ’€๋ฆด ๊ฒƒ ๊ฐ™์€๋ฐ ์‹ถ์€ ๋ฌธ์ œ์ค‘
์ œ์ผ ๊น”๋”ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ‘ผ ๋ฌธ์ œ์ด๋‹ค..

์ฒ˜์Œ์—๋Š” ๊ทธ๋Œ€๋กœ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์‚ญ์ œ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์ค˜์•ผํ• ์ง€ ๋ชฐ๋ผ์„œ
๋ฆฌ์ŠคํŠธ๋ฅผ ํ–‰๊ณผ ์—ด์„ ์„œ๋กœ ๋ฐ”๊พธ์–ด ํ’€์—ˆ๋‹ค.
ํ–‰๊ณผ ์—ด์„ ๋ฐ”๊พธ๋ฉด ์ง€์›Œ์งˆ ๊ฒƒ๋“ค์„ ์‰ฝ๊ฒŒ ์ง€์šธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.

ํ’€๋‹ค๊ฐ€ ์ง€์›Œ์ง€๋Š”๊ฑธ ๋ฐ”๋กœ ์ง€์šฐ๋ฉด ์•ˆ๋˜๊ณ  ์ „์ฒด๋ธ”๋ก์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ง€์›Œ์•ผํ•œ๋‹ค๋Š”๊ฑธ ์•Œ์•˜๋‹ค.
๋ฐ”๋กœ๋ฐ”๋กœ ์ง€์›Œ๋ฒ„๋ฆฌ๋ฉด ๋„ค๋ชจ๊ฐ€ ๊ฒน์ณ์ง€๋Š” ๋ถ€๋ถ„์ด ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค.

b = [[[0, b[y][x], 0] for y in range(m)] for x in range(n)]

๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ [0, b[y][x], 0] ์ด ๋ถ€๋ถ„์—์„œ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ์ง€์›Œ์ง„ ๋ธ”๋ก,
1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ํ–‰๊ณผ ์—ด์ด ๋ฐ”๋€ ๋ธ”๋ก, 2๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ์ง€์›Œ์ ธ์•ผํ•  ๋ธ”๋ก์„
ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด 3๊ฐœ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

ispoped = True
    while ispoped:
    
์ด ๋ถ€๋ถ„์€ ๋”์ด์ƒ ์ง€์›Œ์ง€๋Š” ๋ธ”๋ก์ด ์—†๋‹ค๋ฉด while๋ฌธ์„ ๋๋‚ด๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.

if sum([b[y][x][0], b[y][x+1][0], b[y+1][x][0], b[y+1][x+1][0]]) == 0:
    if len(set([b[y][x][1], b[y][x+1][1], b[y+1][x][1], b[y+1][x+1][1]])) == 1:

์ด ๋ถ€๋ถ„์€ ๋ธ”๋ก 4๊ฐœ๊ฐ€ ๋ชจ๋‘ ์ง€์›Œ์ง„ ๋ธ”๋ก์ด ์•„๋‹ˆ๊ณ , 4๊ฐœ์˜ ๋ธ”๋ก์ด ๊ฐ™์€ ๋ธ”๋ก์ด๋ฉด ์ด๋ผ๋Š” ๋œป์ด๋‹ค.
์ฒซ๋ฒˆ์งธ if๋ฌธ์€ 4๊ฐœ์˜ ๋ธ”๋ก์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋‘ ๋”ํ•ด 0์ด๋ฉด ๋ชจ๋‘ ์‚ด์•„์žˆ๋Š” ๋ธ”๋ก์ด๋‹ค.
์ง€์›Œ์ง„ ๋ธ”๋ก์€ 1๋กœ ๋ฐ”๊พธ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ if๋ฌธ์€ ๋ธ”๋ก 4๊ฐœ๋ฅผ set์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ค‘๋ณต์€ ์ง€์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์—
๊ธธ์ด๊ฐ€ 1์ด๋ผ๋ฉด ๋ชจ๋‘ ๊ฐ™์€ ๋ธ”๋ก์ด๋ผ๋Š” ๋œป์ด๋‹ค.

ispoped = True
b[y][x][2], b[y][x+1][2], b[y+1][x][2], b[y+1][x+1][2] = 1, 1, 1, 1

if๋ฌธ 2๊ฐœ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด ์ง€์›Œ์ง„ ๋ธ”๋ก์ด ์žˆ๋‹ค๋Š” ๋ณ€์ˆ˜๋ฅผ true๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ ,
4๊ฐœ์˜ ๋ธ”๋ก์„ ์ง€์›Œ์ ธ์•ผํ•  ๋ธ”๋ก์ด๋ผ๊ณ  ํ‘œ์‹œํ•ด์ค€๋‹ค.
๋ฐ”๋กœ ์ง€์›Œ๋ฒ„๋ฆฌ๋ฉด ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์˜ ๋„ค๋ชจ๊ฐ€ ์žˆ์„๋•Œ ์ง€์›Œ์ฃผ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์ž„์‹œ๋กœ 2๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ‘œ์‹œ๋ฅผ ํ•ด๋‘์—ˆ๋‹ค.

 for y in range(n-1):
    for x in range(m-1):
        b[y][x][0], b[y][x+1][0], b[y+1][x][0], b[y+1][x+1][0] 
        = b[y][x][2], b[y][x+1][2], b[y+1][x][2], b[y+1][x+1][2]
                
๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋ธ”๋ก์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๋‚˜์„œ ๋‹ค์‹œ ์ง€์›Œ์ ธ์•ผํ•  ๋ธ”๋ก์„ ๊ฒ€์‚ฌํ•ด์„œ
์ง€์›Œ์ง„ ๋ธ”๋ก์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

for i in range(len(b)):
    b[i].sort(key=lambda x: -x[0])

๋งˆ์ง€๋ง‰์œผ๋กœ ์ง€์›Œ์ง„๋ธ”๋ก์€ ์ œ์ผ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  ๋‚จ์€ ๋ธ”๋ก์€ ๋ฐ‘์œผ๋กœ ๊ฐ€์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋ฆฌ์ŠคํŠธ(b)๋ฅผ ๋Œ๋ฉด์„œ ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ 0๋ฒˆ์งธ์ธ๋ฑ์Šค๋ฅผ ๋น„๊ตํ•˜์—ฌ 0์ด๋ฉด ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค๊ฐ€๊ณ ,
1์ด๋ฉด ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ์ •๋ ฌ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  while๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ค๋ฉด ๋ฆฌ์ŠคํŠธ๋“ค์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๋”ํ•ด์ฃผ์–ด
์ตœ์ข… ์ง€์›Œ์ง„๋ธ”๋ก์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฆฌํ„ด์‹œ์ผœ์ฃผ์—ˆ๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€