Skip to content

Commit a27ad08

Browse files
Merge pull request #2042 from CodingTestStudy2/변지협
[변지협] Day17
2 parents 1a00209 + 3444e18 commit a27ad08

2 files changed

Lines changed: 164 additions & 0 deletions

File tree

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
'''
2+
겁나 이해하기 어려운 문제
3+
s = "[123,456,[788,799,833],[[]],10,[]]" 이테스트 케이스 통과를 못함.
4+
'''
5+
6+
# """
7+
# This is the interface that allows for creating nested lists.
8+
# You should not implement it, or speculate about its implementation
9+
# """
10+
#class NestedInteger:
11+
# def __init__(self, value=None):
12+
# """
13+
# If value is not specified, initializes an empty list.
14+
# Otherwise initializes a single integer equal to value.
15+
# """
16+
#
17+
# def isInteger(self):
18+
# """
19+
# @return True if this NestedInteger holds a single integer, rather than a nested list.
20+
# :rtype bool
21+
# """
22+
#
23+
# def add(self, elem):
24+
# """
25+
# Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
26+
# :rtype void
27+
# """
28+
#
29+
# def setInteger(self, value):
30+
# """
31+
# Set this NestedInteger to hold a single integer equal to value.
32+
# :rtype void
33+
# """
34+
#
35+
# def getInteger(self):
36+
# """
37+
# @return the single integer that this NestedInteger holds, if it holds a single integer
38+
# Return None if this NestedInteger holds a nested list
39+
# :rtype int
40+
# """
41+
#
42+
# def getList(self):
43+
# """
44+
# @return the nested list that this NestedInteger holds, if it holds a nested list
45+
# Return None if this NestedInteger holds a single integer
46+
# :rtype List[NestedInteger]
47+
# """
48+
49+
class Solution:
50+
def deserialize(self, s: str) -> NestedInteger:
51+
if s[0] != '[':
52+
return int(s)
53+
54+
55+
56+
s = [i for i in s]
57+
str_tmp = ''
58+
stack = []
59+
lst_tmp = []
60+
while s:
61+
now = s.pop(0)
62+
print('s,now:',s,now)
63+
64+
if now == '[':
65+
if lst_tmp:
66+
stack.append(lst_tmp)
67+
lst_tmp = []
68+
str_tmp = ''
69+
s.pop()
70+
elif now == ',':
71+
lst_tmp.append(str_tmp)
72+
str_tmp = ''
73+
else:
74+
str_tmp += now
75+
76+
lst_tmp.append(str_tmp)
77+
stack.append(lst_tmp)
78+
79+
print(stack)
80+
81+
n = NestedInteger()
82+
n.add(NestedInteger(789))
83+
84+
n1 = NestedInteger()
85+
n1.add(NestedInteger(456))
86+
n1.add(n)
87+
88+
n2 = NestedInteger()
89+
n2.add(NestedInteger(123))
90+
n2.add(NestedInteger(234))
91+
n2.add(n1)
92+
93+
tmp = []
94+
while stack:
95+
# print(tmp)
96+
s = stack.pop()
97+
s = s[::-1]
98+
n = NestedInteger()
99+
while s:
100+
t = s.pop()
101+
n.add(NestedInteger(int(t)))
102+
if tmp:
103+
n.add(tmp[0])
104+
tmp[0] = n
105+
else:
106+
tmp.append(n)
107+
108+
return tmp[0]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
'''
2+
1. 아이디어:
3+
bfs로 섬을 탐색하면서, 섬의 가장자리를 만나면 perimeter를 1씩 증가시킨다.
4+
2. 시간복잡도:
5+
o(n)
6+
3. 알고리즘:
7+
bfs
8+
'''
9+
from collections import deque
10+
class Solution:
11+
def islandPerimeter(self, grid: List[List[int]]) -> int:
12+
x_len = len(grid[0])
13+
y_len = len(grid)
14+
15+
directions = [(-1,0),(1,0),(0,1),(0,-1)]
16+
visited = [[False] * x_len for _ in range(y_len)]
17+
queue = deque()
18+
19+
for y in range(y_len):
20+
breaker = False
21+
for x in range(x_len):
22+
if grid[y][x] == 1:
23+
queue.append((x,y))
24+
visited[y][x] = True
25+
breaker = True
26+
break
27+
28+
if breaker:
29+
break
30+
31+
ans = 0
32+
while queue:
33+
x,y = queue.pop()
34+
35+
if x == 0:
36+
ans += 1
37+
if x == x_len - 1:
38+
ans += 1
39+
if y == 0:
40+
ans += 1
41+
if y == y_len - 1:
42+
ans += 1
43+
44+
for dx,dy in directions:
45+
if 0 <= dx + x < x_len and grid[y][dx+x] == 0:
46+
ans += 1
47+
if 0 <= dy + y < y_len and grid[y+dy][x] == 0:
48+
ans += 1
49+
50+
if 0 <= dx + x < x_len and 0 <= dy+ y < y_len and grid[y+dy][x+dx] == 1 and not visited[y+dy][x+dx]:
51+
queue.append((x+dx,y+dy))
52+
visited[y+dy][x+dx] = True
53+
54+
return ans
55+
56+

0 commit comments

Comments
 (0)