swea 4615 ์ฌ๋ฏธ์๋ ์ค์ ๋ก ๊ฒ์
์ฌ์ฉ์ธ์ด : PYTHON
ํ์ด
๋ฐฉํฅ๋ฒกํฐ๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ ๋ฐฉํฅ์ ๋ฐฑํธ๋ํน ํ๋ฉฐ ์กฐ๊ฑด์ ๋ถํฉํ๋ฉด ๋์ ์์์ ๋ณ๊ฒฝํ๋ค. ( ๋ฐฑํธ๋ํน์ด ๋ง๋๊ฑด๊ฐ..? )
์กฐ๊ฑด์ ๋ถํฉํ๋ค๋ ๋ง์ WBBBW ํน์ BWWWWWB์ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
๋ฐฑํธ๋ํน
๋ฐฉํฅ ๋ฒกํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ ํ ์นธ ์์ ์์์ด ํ์ฌ ์์๊ณผ ๋ค๋ฅด๋ฉด flag๋ณ์
๋ฅผ 1๋ก ๋ฐ๊พธ๊ณ ํ ์นธ ์์ ์์์ ํ์ฌ ์์์ผ๋ก ๋ณ๊ฒฝํ๊ณ ๋ฐฑํธ๋ํน ํจ์๋ฅผ ์ํํ๋ค.
์ด๋ ๋ณ๊ฒฝํ๊ธฐ ์ ์์์ ๋ณ์์ ์ ์ฅํด๋์ด์ผ ํ๋ค. ๋ง์ฝ ์กฐ๊ฑด์ ๋ถํฉํ์ง ์๋๋ค๋ฉด ์์๋ณต๊ตฌ ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
flag๋ณ์ : 2 1 1 1 2 ์ ๊ฐ์ด ํ ์ซ์๊ฐ ๋ค๋ฅธ ์ซ์๋ฅผ ๊ฐ์ธ๋์ง ํ์ธํ๊ธฐ ์ํด ํ์ํ ๋ณ์์ด๋ค.
์ฌ๊ทํจ์๋ก ํธ์ถํ check()
ํจ์๊ฐ False
๋ฅผ ๋ฆฌํดํ๋ค๋ฉด ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ๋ผ๋ ๋ป์ด๋ฏ๋ก 1๋ก ๋ฐ๊พธ์๋ flag๋ณ์
๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํ๊ณ ๋ณ๊ฒฝํ ์์๋ค์ ์์๋ณต๊ตฌ ํ๋ค.
์ ์ค๋ช ์ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
def check(r, c, r_direction, c_direction):
global flag
if not (0<= r + r_direction < N and 0<=c + c_direction < N): # ๋ฆฌ์คํธ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด False
return False
if flag == 1 and l[r + r_direction][c + c_direction] == color: # ํ ์ซ์๊ฐ ๋ค๋ฅธ ์ซ์๋ฅผ ๊ฐ์ธ๋ ๊ฒฝ์ฐ True๋ฅผ ๋ฆฌํด
return True
if l[r + r_direction][c + c_direction] != color and l[r + r_direction][c + c_direction] != 0: # ๋ฐฉํฅ๋ฒกํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ค์ ์นธ ์์์ด ํ์ฌ ์์๊ณผ ๋ค๋ฅด๊ณ 0์ด ์๋๋ผ๋ฉด ๋ฐฑํธ๋ํน์ ์ํ
flag = 1 # ๋ฐฑํธ๋ํน์ ์ง์
ํ์๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด 1๋ก ๋ณ๊ฒฝ
prev_col = l[r + r_direction][c + c_direction] # ์์๋ณต๊ตฌ๋ฅผ ์ํด ์๋ ์์์ ์ ์ฅ
l[r + r_direction][c + c_direction] = color # ๋ค์ ์นธ์ ์์์ ํ์ฌ ์์์ผ๋ก ๋ณ๊ฒฝ
if check(r + r_direction, c + c_direction, r_direction, c_direction): # ๋ฐฑํธ๋ํน ์ํ์ด True๋ฅผ ๋ฆฌํดํ๋ค๋ฉด ์กฐ๊ฑด์ ๋ถํฉํ๋ ๊ฒฝ์ฐ
return True
flag = 0 # ์กฐ๊ฑด์ ๋ถํฉํ์ง ์์์ผ๋ฏ๋ก flag์ด๊ธฐํ
l[r + r_direction][c + c_direction] = prev_col # ๋ณ๊ฒฝํ ์์๋ค์ ์๋ ์์์ผ๋ก ์ด๊ธฐํ
return False
์ด๋ฌํ ๋ฐฑํธ๋ํน์ ๋ชจ๋ ๋ฐฉํฅ์ ๋ํด ์ํํ๋ค.
์ฝ๋
def check(r, c, r_direction, c_direction):
global flag
if not (0<= r + r_direction < N and 0<=c + c_direction < N):
return False
if flag == 1 and l[r + r_direction][c + c_direction] == color:
return True
if l[r + r_direction][c + c_direction] != color and l[r + r_direction][c + c_direction] != 0:
flag = 1
prev_col = l[r + r_direction][c + c_direction]
l[r + r_direction][c + c_direction] = color
if check(r + r_direction, c + c_direction, r_direction, c_direction):
return True
flag = 0
l[r + r_direction][c + c_direction] = prev_col
return False
T = int(input())
direction = [(-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1)]
for i in range(T):
N, M = map(int, input().split())
l = [[0] * N for _ in range(N)]
l[N // 2 - 1][N // 2 - 1] = l[N // 2][N // 2] = 2 # ๋ฐฑ๋ : 2
l[N // 2 - 1][N // 2] = l[N // 2][N // 2 - 1] = 1 # ํ๋ : 1
for _ in range(M):
col, row, color = map(int, input().split())
l[row - 1][col - 1] = color
for dr, dc in direction:
flag = 0
check(row - 1, col - 1, dr, dc)
black=sum([p.count(1) for p in l])
white=sum([p.count(2) for p in l])
print('#{} {} {}'.format((i+1),black,white))
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[swea 3304-ํ์ด์ฌ]์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด (0) | 2023.06.21 |
---|---|
[swea 3307-ํ์ด์ฌ]์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (0) | 2023.06.21 |
[swea 1216-ํ์ด์ฌ]ํ๋ฌธ2 (0) | 2023.06.21 |
[swea 2814-ํ์ด์ฌ]์ต์ฅ ๊ฒฝ๋ก (0) | 2023.06.21 |
[swea 1244-ํ์ด์ฌ][S/W ๋ฌธ์ ํด๊ฒฐ ์์ฉ] 2์ผ์ฐจ - ์ต๋ ์๊ธ (0) | 2023.06.21 |