728x90
๋ฐ์ํ
https://school.programmers.co.kr/learn/courses/30/lessons/17679
"""
๊ฐ ๋ฌธ์๋ ๋ผ์ด์ธ(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
๋ฐ์ํ
๋๊ธ