JLOG
[Python] 코드업 #2605 : 캔디팡 풀이 본문
# import parameter
size = 7 # candy 판의 사이즈
pop = 0 # candy pop한 개수
pop_check = False # candy Pop이 되었는지 check
candies = []
# 7줄 candy 판 입력 받음
for i in range(size): #{
candy_line = input().split(" ")
candies.append(candy_line)
#}
# 이번 블록이 색깔, 조건이 맞는지 확인
def check_color(w, h, color, history) : #{
if w < 0 or h < 0 or w >= size or h >= size : #{
return -1
#}
for his in history :
if his[0] == w and his[1] == h :
return -1
if candies[w][h] == color : #{
return 1
#}
else : return -1
#}
# 재귀함수를 이용해서 기준 블록부터 탐색해 확인해준다.
def check_same_color(w, h, history, num) : #{
global candies, pop, pop_check
# 현재 블록 컬러색깔
color = candies[w][h]
# 컬러가 0 이면 이미 check 된 것
if color == '0' : return 0
# pop 조건에 맞으면 0으로 바꿔주기 위해서
# 탐색 했던 루트를 돌아가지 않기 위해 좌표를 저장해준다.
history.append([w,h])
# check_color로 현재 블록이 pop 조건에 맞는지 확인해준다.
result = [check_color(w - 1, h, color, history[:-1]), check_color(w + 1, h, color, history[:-1]), check_color(w, h - 1, color, history[:-1]), check_color(w, h + 1, color, history[:-1])]
# 조건이 맞다면, 해당 블록으로 이동해 다시 탐색한다.
if result[0] == 1 : check_same_color(w - 1, h, history, num+1) # up
if result[1] == 1 : check_same_color(w + 1, h, history, num+1) # down
if result[2] == 1 : check_same_color(w, h - 1, history, num+1) # left
if result[3] == 1 : check_same_color(w, h + 1, history, num+1) # right
# 모든 블록이 조건에 맞지 않다면 candy pop의 조건을 충족했는지 확인한다.
elif result == [-1, -1, -1, -1] : #{
if num >= 2 : #{
pop_check = True # 조건을 충족했으면 pop_check = True로 변경한다.
# pop을 체크한 것을 확인하기 위해 색깔을 0으로 변경해준다.
for his in history : #{
candies[his[0]][his[1]] = '0'
#}
#}
#}
#----------------------------------------------------------------------
# MAIN
#----------------------------------------------------------------------
# 모든 판을 돌면서 candy pop이 되는지 확인한다.
for w in range(size) : #{
for h in range(size) : #{
pop_check = False
check_same_color(w, h, [], 0)
if pop_check == True : pop += 1
#}
#}
print(pop)
이해가 안된다는 말이 있어서 추가 설명을 작성해본다.
헷갈리는 부분 있으면 댓글 주세요
'Algorithm > 알고리즘 풀이' 카테고리의 다른 글
[Python] 코드업 2610 : 그림판 채우기 (0) | 2020.05.26 |
---|---|
[Python] 코드업 #3130 : 소들의 헤어스타일 (0) | 2020.05.22 |
[Python] 코드업 4040 : 펜션 풀이 (0) | 2020.05.16 |
[Python] 코드업 2641 : 숏다리의 계단 오르기 (Small) 풀이 (0) | 2020.05.15 |
[Python] 코드업 2102 : 배수 풀이 (0) | 2020.05.10 |
Comments