코드
from collections import deque
from copy import deepcopy
def solution(m, n, picture):
near = [(0, 1), (1, 0), (0, -1), (-1, 0)]
# visit = [[0 for _ in range(n)] for _ in range(m)]
pic = deepcopy(picture)
# print(visit)
mymax = 0
q = deque()
cnt = 0
result = []
for i in range(m):
for j in range(n):
if picture[i][j] != 0:
q.append([i, j])
cnt += 1
answer = 0
while q:
x, y = q.popleft()
temp = pic[x][y]
# print(temp)
for a, b in near:
xi, yi = x + a, y + b
if 0 <= xi < m and 0 <= yi < n and picture[xi][yi] == temp:
picture[xi][yi] = 0
q.append([xi, yi])
answer += 1
# print(q)
if mymax < answer:
mymax = answer
result.append(cnt)
result.append(mymax)
# print(result)
return result
주의할 점
1. 이 문제는 백준의 단지 수 세기와 유사하다. 세주어야하는 것이많다. 하나의 색깔이 시작되면 cnt += 1 그리고 연결되어있는 색깔의 갯수가 몇개인지 세주어야한다.
2. 다른 문제는 보통 숫자로 정확히 주어지는데, 이 문제는 2^31 - 1개가 나올 수 있다고 해서 처음 q에 들어갈 때
picture의 색깔을 표시해줘야한다.
- 처음에는 temp = picture[x][y] 라고 지정했더니 계속 while문이 무한루프를 돌았다.
why? 내가 지나온 것은 visit을 안쓰고 0으로 바꾸다보니까 숫자가 지정이 되어있어야하는데, 자꾸 바뀐 숫자
0이랑 다음 값picture[xi][yi]를 비교했다. 그러니까 당연히 안될 수 밖에,,,,
-> ** 해결책 : picture를 copy해서 그 값만 유효하게 가지고올 수 있게 했더니 잘 돌아갔다(물론 이 문제는 c랑
javascript로만 풀수있게 되어있어서 정답을 확인할수는 없지만,, 몇개의 예시가 잘 돌아갔다)
'알고리즘' 카테고리의 다른 글
[programmers] 보석쇼핑 (0) | 2020.08.13 |
---|---|
[baekjoon] 3190. 뱀 (0) | 2020.08.12 |
[programmers] 가장 큰 수 (0) | 2020.08.11 |
[programmers] 문자열 압축 (0) | 2020.08.11 |
[programmers] 소수찾기(12921) (0) | 2020.07.08 |