์๋ฃ๊ตฌ์กฐ ๋ฐ ์ค์ต
์๋ฃ๊ตฌ์กฐ ๋ฐ ์ค์ต - [5] ์งํฉ ์ค์ต๋ฌธ์ (ํ์ด์ฌ์ผ๋ก ํฉ์งํฉ, ๊ต์งํฉ, ์ฐจ์งํฉ, ์์๊ณผ ๋ถ๋ถ์งํฉ ๊ตฌํ)(2)
Mainyoung
2022. 1. 26. 21:15
๋ ๊ฐ์ ์งํฉ A์ B๋ฅผ ์ ๋ ฅ๋ฐ์, A๊ฐ B์ ๋ถ๋ถ์งํฉ์ธ์ง ๊ฒ์ฌํ๋ ํ๋ก๊ทธ๋จ๊ณผ ๊ต์งํฉ, ํฉ์งํฉ, ์ฐจ์งํฉ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ํค๋ & ํธ๋ ์ผ๋ฌ ์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ ํํ๋ก ๊ตฌ์ถํ์์ค.
์ด๋ ค์ ๋ณด์ผ์ ์์ง๋ง ์ด์ ๊ฒ์๊ธ์ ์์ฌ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ค๋ฉด ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋ค.
https://mainyoung.tistory.com/25
class Node:
def __init__(self,data,prev=None,next = None):
self.data = data
self.prev = prev
self.next = next
#์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌ์ฑ๋ ์งํฉ
class DLset:
def __init__(self):
self.header = Node("Header")
self.trailer = Node("Trailer",self.header)
self.header.next = self.trailer
self.setsize = 0
def isEmpty(self):
if self.setsize ==0:
return True
else:
return False
def printset(self):
if self.setsize == 0:
print("๊ณต์งํฉ")
else:
target = self.header
for i in range(self.setsize):
target = target.next
print(target.data,end=" <=> ")
# def member(self,e):
# if self.setsize == 0:
# return False
# else:
# target = self.header
# for i in range(self.setsize):
# target = target.next
# if target.data == e:
# return True
# return False
def member(self,e):
if self.setsize ==0:
return False
target = self.header.next
while True:
a = target.data
if a<e:
if target.next == None:
return False
else:
target = target.next
elif a>e:
return False
else:
return True
def addelem(self,e):
# if self.setsize==0:
# newnode = Node(e,self.header,self.trailer)
# self.header.next= newnode
# self.trailer.prev = newnode
# else:
# target = self.header
# newnode = Node(e) #์ฝ์
ํ ๊ฑฐ ์์ฑ
# for i in range(self.setsize):
# target = target.next
# target.next.prev
# target.next = newnode #์ฐ๊ฒฐ1
# newnode.prev = target #์ฐ๊ฒฐ2
# print(f"before : {self.trailer.prev.prev.data}")#" <=> {self.trailer.prev.data}")" <=> {self.trailer.data}")
newnode = Node(e,None,self.trailer)#Newnode_prev : None / Newnode_next = trailer
prev_trailer = self.trailer.prev
newnode.prev = prev_trailer#Newnode_prev : ์ ์ trailer์ ์ฐ๊ฒฐ๋์๋ ๋
ธ๋ / Newnode_next = trailer
prev_trailer.next = newnode
self.trailer.prev = newnode #trailer์ค์ ์๋ฃ
#print(f"After : {self.trailer.prev.prev.data} <=> {self.trailer.prev.data} <=> {self.trailer.data}")
self.setsize +=1
def removeElem(self, e):
if self.setsize==0:
print("Invalid position")
else:
target = self.header
for i in range(self.setsize):
target = target.next
if target.data == e:
break
prevnode = target.prev
nextnode = target.next
d = target.data
prevnode.next = nextnode
nextnode.prev = prevnode
del(target)
self.setsize -=1
def union(self,B):
c = []
while (not self.isEmpty()) and (not B.isEmpty()):
a = self.header.next.data
b = B.header.next.data
if a<b:
c.append(a)
self.removeElem(a)
elif a>b:
c.append(b)
B.removeElem(b)
else:
c.append(a)
self.removeElem(a)
B.removeElem(b)
while not self.isEmpty():
a = self.header.next.data
c.append(a)
self.removeElem(a)
while not B.isEmpty():
b = B.header.next.data
c.append(b)
B.removeElem(b)
return c
def intersect(self,B):
c = []
while (not self.isEmpty()) and (not B.isEmpty()):
a = self.header.next.data
b = B.header.next.data
if a<b:
self.removeElem(a)
elif a>b:
B.removeElem(b)
else:
c.append(a)
self.removeElem(a)
B.removeElem(b)
while not self.isEmpty():
a = self.header.next.data
self.removeElem(a)
while not B.isEmpty():
b = B.header.next.data
B.removeElem(b)
return c
def subtract(self,B):
c = []
while (not self.isEmpty()) and (not B.isEmpty()):
a = self.header.next.data
b = B.header.next.data
if a<b:
c.append(a)
self.removeElem(a)
elif a>b:
B.removeElem(b)
else:
self.removeElem(a)
B.removeElem(b)
while not self.isEmpty():
a = self.header.next.data
c.append(a)
self.removeElem(a)
while not B.isEmpty():
b = B.header.next.data
B.removeElem(b)
return c
def subset(self,B):
if self.setsize ==0:
return True
target = self.header.next
while True:
if B.member(target.data):
if target.next == None:
return True
else:
target = target.next
else:
return False
https://mainyoung.tistory.com/25
>>> A = DLset()
>>> B = DLset()
>>> A.addelem(1)
>>> A.addelem(2)
>>> A.addelem(3)
>>> B.addelem(2)
>>> B.addelem(3)
>>> B.addelem(4)
>>> A.union(B)
[1, 2, 3, 4]
๊ตฌ์ฑํ๋ ๋์ค, ์ด์ค์ฐ๊ฒฐ์ ์ ๊ตฌ์ฑํ์ง ๋ชปํด ์ฝ๊ฐ์ ์ค๋ฅ๊ฐ ์์์ง๋ง ๊ฐ ๊ณผ์ ์์ ์ถ๋ ฅ์ ํจ์ผ๋ก์จ ์ด๋ ๋ถ๋ถ์ด ์๋ชป๋์๋์ง ํ์ธํ ์ ์์๋ค!! ํน์ ๊ตฌํ์ด ์ ์๋๋ค๋ฉด ๊ณผ์ ์ ์ถ๋ ฅํด๋ณด์.
728x90