44
55# checkpoint
66# 큰 상자에 포함될 수록 절약된다.
7+
8+ import pytest
9+
710import sys
811
912'''
10- # →⌟↑
13+ # →⌟↑
1114dr = [(0, 1), (1, 0), (0, -1)]
1215def scan_sq(current, space, visited):
1316 cx, cy = current
14- # SCAN →⌟↑
17+ # SCAN →⌟↑
1518 #####
1619 # 스택에 방문한 데 넣어놓고, 방문하면서 visited 보다 크면 넣기
1720 #####
@@ -21,54 +24,123 @@ def stick_sq(current, space, visited):
2124'''
2225
2326# 그냥 아예 처음부터 큰 거 붙이기
27+ import copy
2428
2529
2630def stick_sq (current , size , space , sticked ):
2731 cx , cy = current
32+ # c_sticked = copy.deepcopy(sticked) # 주소값 가져와서 바로 변경?
2833 square = True
2934 visited = []
30- for i in range (size ): # 아래 세줄을 파이썬 하게 바꾼다면?
35+ for i in range (size ): # 아래 세줄을 파이썬 하게 바꾼다면?
3136 for j in range (size ):
3237 x , y = (cx + i , cy + j )
33- if sticked [x ][y ] == 0 and space [x ][y ] == 0 :
38+ if sticked [x ][y ] == 0 and space [x ][y ] == 1 :
39+ visited .append ((x , y ))
40+ continue
41+ else :
3442 square = False
3543 break
36- visited .append ((x , y ))
37- if sqaure = False :
38- return space , sticked , 0 # 계속해서 공간값을 넘겨주는게 좋은 걸까?
39- else :
40- while visited :
41- x , y = visited .pop ()
42- sticked [x ][y ] == 1
43- return space , sticked , 1
44-
45-
46- def solution (square ):
47- size = len (square )
48- space = square # 궁금증.. 값 변경해주기 위해서 이렇게!?!? iterator!?
44+ if square == False :
45+ return 0 , [] # 계속해서 공간값을 넘겨주는게 좋은 걸까?
46+ return 1 , visited
47+
48+
49+ def solution (square ): # size는 색종이 크기, num은 갯
50+ size = 5
51+ num = 5
4952 ans = 0
50- sticked = [[0 ]* size for _ in range (size )]
53+ sticked = [[0 ]* len ( square ) for _ in range (len ( square ) )]
5154
5255 # for s in reversed(range(size + 1)) # 이것보다 직관적인 것 같아서..
53- for s in range (size , 0 , - 1 ): # 언어에 대한 궁금증.. 왜 마지막 값은 포함 안 될까?
56+ for s in range (5 , 0 , - 1 ): # 언어에 대한 궁금증.. 왜 마지막 값은 포함 안 될까?
5457 # 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
5558 # 0, 0~1, 0~2, 0~3, 0~4
56- for x in range (s + 1 ):
57- for y in range (s + 1 ):
58- space , visited , ans_add = stick_sq ((x , y ), size , square , visited )
59- ans += ans_add
59+ count = 5
60+ for x in range (10 - s + 1 ): # 10-s+1
61+ for y in range (10 - s + 1 ):
62+ if square [x ][y ] == 0 :
63+ continue
64+ if count == 0 :
65+ if s != 1 :
66+ break
67+ elif square [x ][y ] == 1 and sticked [x ][y ] == 0 :
68+ return - 1
69+ success , visited = stick_sq ((x , y ), s , square , sticked )
70+ if success :
71+ ans += 1
72+ while visited :
73+ x , y = visited .pop ()
74+ sticked [x ][y ] = 1
75+ count -= 1
6076 return ans
6177
6278
6379def main ():
6480 stdin = sys .stdin
65- square = [map (int , stdin .readline ().split ()) for _ in range (10 )]
66- solution (square )
81+ # 'map' object is not subscriptable
82+ square = [list (map (int , stdin .readline ().split ())) for _ in range (10 )]
83+ print (solution (square ))
6784
6885
6986if __name__ == "__main__" :
7087 main ()
7188
89+ # stdin params 입력..
90+
91+
92+ @pytest .mark .parametrize (
93+ "square" ,
94+ [
95+ # [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
96+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
97+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
98+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
99+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
100+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
101+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
102+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
103+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
104+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
105+ # ],
106+ [[0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
107+ [0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
108+ [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
109+ [0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ],
110+ [0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ],
111+ [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
112+ [0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
113+ [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
114+ [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ],
115+ [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]]
116+ # [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
117+ # [0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
118+ # [0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
119+ # [0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
120+ # [0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
121+ # [0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
122+ # [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
123+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
124+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
125+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
126+ # [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
127+ # [0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
128+ # [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
129+ # [0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
130+ # [0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
131+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
132+ # [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
133+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
134+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
135+ # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
136+ # ]
137+ ]
138+ )
139+ def test_solution (square ):
140+ assert solution (square ) == 4
141+ # assert solution(square) == -1
142+
143+
72144'''testcase
731450 0 0 0 0 0 0 0 0 0
741460 0 0 0 0 0 0 0 0 0
0 commit comments