์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์‹ค์Šต

์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์‹ค์Šต - [4] ๋ฆฌ์ŠคํŠธ ์‹ค์Šต๋ฌธ์ œ (ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋‹คํ•ญ์‹) (2)

Mainyoung 2022. 1. 25. 19:29

์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜๋ฌธ์ž ๋ฆฌ์ŠคํŠธ ADT๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž.

 

ํŒŒ์ด์ฌ์„ ํ™œ์šฉํ•ด ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž. ํ˜น์‹œ ์ž๊ธฐ๊ฐ€ ํŒŒ์ด์ฌ์˜ ํด๋ž˜์Šค๋ฅผ ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด ์ด๋ฒˆ ์ฝ”๋“œ๊ฐ€ ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณธ์ธ์ด ํŒŒ์ด์ฌ ํด๋ž˜์Šค๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด

https://mainyoung.tistory.com/5

 

Python - ํด๋ž˜์Šค (Class) 1

Python ๊ธฐ์ดˆ ๋ฌธ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ํด๋ž˜์Šค๊ฐ€ ๋‚˜์™”๋Š”๋ฐ... ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜์ƒ์„ ์ฐพ์•„๋ด๋„ ๋„ํ†ต ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ, ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜๋Š” ๊ธ€์„ ์ฐพ์•˜๋‹ค! ํด๋ž˜์Šค๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€? ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ํ‹€์„ ๋งŒ๋“œ

mainyoung.tistory.com

์œ„ ๊ธ€์„ ํ™•์ธํ•˜์ž!

 

์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ๋Š” ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค. ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” next๋งŒ ์กด์žฌํ•˜์ง€๋งŒ, ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Prev๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋˜ํ•œ header ๋…ธ๋“œ์™€ Trailer๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘์—…์˜ ํŽธ์˜์„ฑ์ด ์ฆ์ง„๋˜๋ฏ€๋กœ, ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค.

์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ž์„ธํ•œ ํŠน์ง•์€

https://mainyoung.tistory.com/21

 

์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์‹ค์Šต - [3] ๊ธฐ์ดˆ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ) (1)

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ๊ธฐ๋ณธ ์žฌ๋ฃŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์žฌ๋ฃŒ๋กœ๋Š” ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋ณธ ์žฌ๋ฃŒ๋กœ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์•Œ์•„๋‘์–ด์•ผ ํ•œ๋‹ค! ๋ฐฐ์—ด (array) ์ˆœ์ฐจ

mainyoung.tistory.com

 

class Node(object): #์ด์ค‘์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ Node์˜ ๊ตฌ์„ฑ์š”์†Œ๋Š” data์˜ ์ €์žฅ๊ณต๊ฐ„, ์ด์ „ ๋…ธ๋“œ ์ฃผ์†Œ์ €์žฅ๊ณต๊ฐ„, ๋‹ค์Œ๋…ธ๋“œ ์ฃผ์†Œ ์ €์žฅ๊ณต๊ฐ„์ด ์žˆ๋‹ค.
  def __init__(self, data,prev=None,next=None):
    self.data = data #data์˜ ์ €์žฅ๊ณต๊ฐ„
    self.next = next #๋‹ค์Œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
    self.prev = prev #์ด์ „ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ

class DList(object):
  def __init__(self):
    self.head = Node(None) #ํ—ค๋“œ๋…ธ๋“œ ์„ค์ •
    self.tail = Node(None,self.head) # data์—๋Š” None, prev์—๋Š” ํ—ค๋“œ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ
    self.head.next = self.tail #ํ—ค๋“œ๋…ธ๋“œ์˜ next์—๋Š” tail๋…ธ๋“œ ์—ฐ๊ฒฐ
    self.size=0 #๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ

  def listSize(self): #๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ˜ํ™˜
    return self.size

  def is_empty(self): #๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ด๋ฉด True,์•„๋‹ˆ๋ฉด False
    if self.size !=0:
      return False
    else:
      return True

  def selectNode(self, idx): #idx์— ํ•ด๋‹นํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
    if idx> self.size: #๋งŒ์•ฝ ์ž˜๋ชป๋œ ์ธ๋ฑ์Šค๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด?
      print("invalid position")

    else: #์ธ๋ฑ์Šค์˜ ์ž…๋ ฅ์ด ์ž˜ ๋˜์—ˆ์„๋•Œ
      if idx == 0:  #๋งŒ์•ฝ ์ธ๋ฑ์Šค๊ฐ€ 0์ด๋ฉด?
        return self.head  #ํ—ค๋“œ๋…ธ๋“œ ๋ฐ˜ํ™˜
      if idx == self.size : #๋งŒ์•ฝ ์ธ๋ฑ์Šค๊ฐ€ ๋งจ ๋์ด๋ฉด?
        return self.tail  # ํ…Œ์ผ๋…ธ๋“œ ๋ฐ˜ํ™˜
      if idx <= self.size//2: #๋งŒ์•ฝ ์ธ๋ฑ์Šค๊ฐ’์ด ์ฒ˜์Œ๊ณผ ์ค‘๊ฐ„ ์‚ฌ์ด์— ์žˆ๋‹ค๋ฉด?
        target = self.head  #ํƒ€๊ฒŸ์„ ํ—ค๋“œ์— ๋‘๊ณ 
        for _ in range(idx):  #idx๋งŒํผ for๋ฌธ์„ ๋Œ๋ฉด์„œ
          target = target.next  #๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
        return target
      else: #์ธ๋ฑ์Šค ๊ฐ’์ด ์ค‘๊ฐ„๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์žˆ๋‹ค๋ฉด?
        target = self.tail  #ํ…Œ์ผ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ
        for _ in range(self.size - idx): #์ธ๋ฑ์Šค๊นŒ์ง€ ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ for๋ฌธ์„ ๋ˆ๋‹ค
          target = target.prev
        return target

  def appendleft(self, value):  #๋งจ ์•ž์ชฝ์— ๋ถ™์ด๋Š”๊ฑฐ
    if self.is_empty(): #๊ฐ’์ด ์•„์˜ˆ์—†์œผ๋ฉด
      self.head = Node(value) #๋…ธ๋“œ ์„ค์ •
      self.tail = Node(None,self.head) #ํ—ค๋“œ๋…ธ๋“œ ์—ฐ๊ฒฐ
      self.head.next = self.tail  #ํ—ค๋“œ๋…ธ๋“œ์™€ ํ…Œ์ผ๋…ธ๋“œ ์—ฐ๊ฒฐ
    
    else: # ๋ฆฌ์ŠคํŠธ์— ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด
      tmp = self.head #tmp์— ํ—ค๋“œ๋…ธ๋“œ ์ €์žฅํ•ด๋†“๊ณ 
      self.head = Node(value,None,self.head) #ํ—ค๋“œ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, next์— ๊ธฐ์กด ํ—ค๋“œ๋…ธ๋“œ์˜€๋˜๊ฒƒ์„ ์—ฐ๊ฒฐํ•˜๋ฉด์„œ ๋งจ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์— ํ•œ๊ฐœ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ฒŒ๋จ
      tmp.prev = self.head  #๊ธฐ์กด ํ—ค๋“œ๋…ธ๋“œ์˜€๋˜๊ฒƒ์˜ ์ด์ „ ๋…ธ๋“œ๊ฐ€ ํ—ค๋“œ๋…ธ๋“œ๋กœ ์„ค์ •

    self.size +=1 #์‚ฌ์ด์ฆˆ ํ•œ๊ฐœ ์ถ”๊ฐ€

  def append(self,value): #๋งจ ๋’ค์ชฝ์— ๋”ํ•˜๋Š”๊ฑฐ
    if self.is_empty(): #๋น„์–ด์žˆ์œผ๋ฉด ๊ทธ๋ƒฅ ๋˜‘๊ฐ™์ด
      self.head = Node(value)
      self.tail = Node(None,self.head)
      self.head.next = self.tail

    else: 
      tmp = self.tail.prev #tmp์— ๊ผฌ๋ฆฌ๋…ธ๋“œ์˜ prev๋ฅผ ์ €์žฅํ•ด๋†“๊ณ 
      newNode = Node(value,tmp,self.tail) #์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ ํ—ค๋“œ
      tmp.next = newNode #๊ผฌ๋ฆฌ๋…ธ๋“œ๋Š” ๋ƒ…๋‘๊ณ  ์ด ์ „์— ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹ , ์œ„์—์„œ๋Š” ํ—ค๋“œ๋…ธ๋“œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ผฌ๋ฆฌ๋…ธ๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ์ž„.
      self.tail.prev = newNode #์™œ๋ƒ๋ฉด ๊ผฌ๋ฆฌ์ชฝ์— ๋ถ™์ด๋Š”๊ฑฐ๋Š” ์ธ๋ฑ์Šค๋กœ ๋ดค์„๋•Œ ๊ธฐ์กด๊ผฌ๋ฆฌ๋…ธ๋“œ ๋’ค์— ๋ถ™๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ผฌ๋ฆฌ๋Š” ๊ทธ๋Œ€๋กœ์žˆ๊ณ  ๊ทธ ์•ž์— ๋ถ™๊ธฐ ๋•Œ๋ฌธ 
    self.size +=1

  def insert(self,value,idx):
    if self.is_empty():#๋น„์–ด์žˆ์œผ๋ฉด
      self.head = Node(value) #ํ—ค๋“œ๋…ธ๋“œ ์„ค์ •
      self.tail = Node(None,self.head)#๊ผฌ๋ฆฌ๋…ธ๋“œ ์„ค์ •, ํ—ค๋“œ์™€ ์—ฐ๊ฒฐ
      self.head.next = self.tail #๊ผฌ๋ฆฌ์™€ ํ—ค๋“œ์™€ ์—ฐ๊ฒฐ

    else:#์•„๋‹ˆ๋ฉด
      tmp  = self.selectNode(idx) #tmp์— ๊ธฐ์กด ๋…ธ๋“œ์ €์žฅํ•˜๊ณ 
      if tmp == None:
        return
      if tmp == self.head: #์ธ๋ฑ์Šค๊ฐ€ ํ—ค๋“œ๋…ธ๋“œ๋ผ๋ฉด
        self.appendleft(value) # ์•„๊นŒ ์„ค์ •ํ•œ๊ฑฐ
      elif tmp == self.tail:#ํ…Œ์ผ๋…ธ๋“œ๋ผ๋ฉด
        self.append(value) #append
      else:#๊ทธ ์™ธ
        tmp_prev = tmp.prev #๊ธฐ์กด idx์— ํ•ด๋‹นํ•˜๋Š” prev๋ฅผ ์ €์žฅํ•˜๊ณ 
        newNode = Node(value,tmp_prev,tmp) #new Node๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ prev์—๋Š” tmp_prev,tmp์—๋Š” ๊ธฐ์กด idx์— ์žˆ๋˜ tmp๋ฅผ ์—ฐ๊ฒฐ
        tmp_prev.next = newNode #tmp_prev์˜ next์—๋Š” new node์—ฐ๊ฒฐ
        tmp.prev = newNode # tmp์˜ prev์—๋Š” newNode์—ฐ๊ฒฐ

    self.size +=1
  
  def delete(self, idx): 
    if self.is_empty(): #๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด
      print("invalid position")
      return
    else:
      tmp = self.selectNode(idx) #๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ 
      if tmp == None: #๋งŒ์•ฝ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด...
        return
      elif tmp == self.head: #ํ—ค๋“œ ๋…ธ๋“œ๋ฉด?
        tmp = self.head #tmp์— ํ—ค๋“œ๋…ธ๋“œ ์ €์žฅ
        self.head = self.head.next #ํ—ค๋“œ๋…ธ๋“œ๋ฅผ ํ—ค๋“œ์˜ ๋‹ค์Œ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ
      elif tmp == self.tail : #๊ผฌ๋ฆฌ๋…ธ๋“œ๋ฉด?
        tmp = self.tail
        self.tail = self.tail.prev #๊ผฌ๋ฆฌ๋…ธ๋“œ๋ฅผ ๊ผฌ๋ฆฌ์ด์ „ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ
      else: #์ค‘๊ฐ„์—์ž‡๋‹ค๋ฉด?
        tmp.prev.next = tmp.next #์„ ํƒ๋œ ๋…ธ๋“œ์˜ ์ด์ „๋…ธ๋“œ์˜ next์—๋Š” tmp.next์—ฐ๊ฒฐ
        tmp.next.prev = tmp.prev #์„ ํƒ๋œ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ด์ „์—๋Š” tmp.prev์—ฐ๊ฒฐ
      
      del(tmp) #๊ทธ๋ฆฌ๊ณ  tmp์‚ญ์ œ
      self.size -=1 #๊ฐœ์ˆ˜ ์‚ญ์ œ

  def printlist(self): #๋ฆฌ์ŠคํŠธ ํ”„๋ฆฐํŠธํ•˜๊ธฐ
    target = self.head # ํ—ค๋“œ๋…ธ๋“œ๋ถ€ํ„ฐ
    while target != self.tail: #๊ผฌ๋ฆฌ๋…ธ๋“œ๊นŒ์ง€
      if target.next != self.tail: #๋งŒ์•ฝ ๋…ธ๋“œ์˜ next์— ์—ฐ๊ฒฐ๋œ๊ฒŒ ๊ผฌ๋ฆฌ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด
        print(target.data,'<=>',end ='') #์ถœ๋ ฅ
      else:
        print(target.data) #๊ผฌ๋ฆฌ๋…ธ๋“œ๋ฉด ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ
      
      target = target.next #๊ณ„์† ์ด์–ด๊ฐ€๊ธฐ

๋จผ์ € Node์— ๋Œ€ํ•œ Class๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Prev์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” next, ์›์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” data๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

 

๋˜ํ•œ DList Class๋ฅผ ์ •์˜ํ•˜๋ฉฐ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉฐ ์ฃผ์„์„ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

์œ„ ์ฝ”๋“œ๋Š” ๊ตฌ๊ธ€๋ง์„ ํ•˜๋ฉฐ ์–ด๋””์„ ๊ฐ€ ๋น„์Šค๋ฌด๋ฆฌํ•˜๊ฒŒ ๋ฒ ๊ปด์˜จ ์ฝ”๋“œ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ๋‚˜๋งŒ์˜ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ์˜์‚ฌ์ฝ”๋“œ๋งŒ ์ฐธ๊ณ ํ•˜์—ฌ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

class Node(object):
  def __init__(self,data,prev=None,next = None):
    self.data = data
    self.prev = prev
    self.next = next

class DList(object):
  # ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
  def __init__(self): 
    self.header = Node(None)
    self.trailer = Node(None,self.header)
    self.header.next = self.trailer
    self.listsize = 0
  # get
  def get(self,rank):
    if rank<1 or self.listsize<rank:
      print("Invalid position")
    else:
      target = self.header
      for i in range(rank):
        target = target.next
      print(target.data)
      return target.data
  #์ˆœํšŒ (๋ชจ๋“  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์›์†Œ ์ถœ๋ ฅ)
  def printlist(self):
    if self.listsize ==0:
      print("")
    else:
      target = self.header.next
      while target != self.trailer:
        print(target.data, end=" ")
        target = target.next
  
  #์‚ฝ์ž… 
  # def addNodeBefore(self,pnode,data):
  #   newNode = Node(data)
  #   newNode.prev = pnode.prev
  #   newNode.next = pnode
  #   pnode.prev.next = newNode
  #   pnode.prev = newNode

  def addNode(self,rank,data):
    if rank<1 or rank>self.listsize+1:
      print("Invalid position")
    else:
      target = self.header
      for i in range(rank):
        target = target.next
      newNode = Node(data)
      newNode.prev = target.prev
      newNode.next = target
      target.prev.next = newNode
      target.prev = newNode
      self.listsize +=1
  
  #์‚ญ์ œ 
  # def removeNode(self,pnode):
  #   data = pnode.data
  #   pnode.prev.next = pnode.next
  #   pnode.next.prev = pnode.prev
  #   del(pnode)
  #   return data

  def remove(self,rank):
    if rank<1 or self.listsize<rank:
      print("Invalid position")
    else:
      target = self.header
      for i in range(rank):
        target = target.next
      data = target.data
      target.prev.next = target.next
      target.next.prev = target.prev
      del(target)
      self.listsize -=1
      print(data)

 

 

๋‹คํ•ญ์‹์„ ํ—ค๋” ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž.

๋‹คํ•ญ์‹์„ ํ‘œํ˜„ํ•˜๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

- ํ•˜๋‚˜์˜ ๋‹คํ•ญ์‹(polynomial)์„ ํ•˜๋‚˜์˜ ํ—ค๋” ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ ์‚ฌ์šฉ

 

๋˜ํ•œ ๋‹คํ•ญ์‹์˜ ๊ฐ ํ•ญ์€ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๊ฐ ๋…ธ๋“œ์—๋Š” ๋‹ค์Œ ์„ธ ๊ฐœ์˜ ํ•„๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค. 

- Coef : ํ•ญ์˜ ๊ณ„์ˆ˜

- Exp: ํ•ญ์˜ ๊ณ„์ˆ˜

- next : ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งํฌ

 

ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ๋Š” ์ฐจ์ˆ˜์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ˆœ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ , ๊ณ„์ˆ˜๊ฐ€ 0์ธ ํ•ญ์˜ ๋…ธ๋“œ๋Š” ์œ ์ง€ํ•˜์ง€ ์•Š์Œ

 

๋‹คํ•ญ์‹์— ํ•ญ ์ถ”๊ฐ€

๊ธฐ์กด ๋‹คํ•ญ์‹์˜ ๋งˆ์ง€๋ง‰ ํ•ญ์„ ํ‘œํ˜„ํ•˜๋Š” ๋…ธ๋“œ k์— ๊ณ„์ˆ˜ c์™€ ์ฐจ์ˆ˜ e๋กœ ์ด๋ฃจ์–ด์ง„ ์ƒˆ ํ•ญ ์ถ”๊ฐ€

'๋‹คํ•ญ์‹์— ํ•ญ ์ถ”๊ฐ€' ์˜์‚ฌ์ฝ”๋“œ

๋‹คํ•ญ์‹ ๋ง์…ˆ

๋‘ ๊ฐœ์˜ ๋‹คํ•ญ์‹ x, y์— ๋Œ€ํ•œ ๋ง์…ˆ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ํ—ค๋” ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
- ์˜ˆ: ์œ„ ์˜ˆ์˜ ๋‹คํ•ญ์‹ a, b์˜ ๋ง์…ˆ ๊ฒฐ๊ณผ๋Š” 3x4 + 11x3 + 4 ๋ฅผ ๋ฐ˜ํ™˜

์œ„๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹คํ•ญ์‹์˜ ๋ง์…ˆ์„ ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ •์˜ํ–ˆ๋‹ค.

# ๋‹คํ•ญ์‹ ๋‹จ์ผ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ •์˜
class Node:
  def __init__(self,coef,exp,next = None):
    self.coef = coef
    self.exp = exp
    self.next = next

class polynomials:
  def __init__(self): #์ดˆ๊ธฐํ™”
    self.header = Node(None,None)
    self.polysize = 0

  def appendTerm(self,coef,exp):
    newnode = Node(coef,exp)
    newnode.coef = coef
    newnode.exp = exp

    target = self.header

    if self.polysize == 0:
      self.header.next = newnode
    else:
      for _ in range(self.polysize):
        target = target.next
      target.next = newnode
    self.polysize +=1
    
#========================================================================

result = polynomials()
x = polynomials()
y = polynomials()

N = int(input())
a = list(map(int,input().split()))
M = int(input())
b = list(map(int,input().split()))

tmp = 0
for i in range(N):
  x.appendTerm(a[tmp],a[tmp+1])
  tmp+=2

tmp = 0
for i in range(M):
  y.appendTerm(b[tmp],b[tmp+1])
  tmp+=2

i = x.header.next
j = y.header.next
while (i!=None) and (j != None):
  if i.exp>j.exp:
    result.appendTerm(i.coef,i.exp)
    i = i.next
  elif i.exp<j.exp:
    result.appendTerm(j.coef,j.exp)
    j = j.next
  else:
    sum = i.coef + j.coef
    if sum != 0:
      result.appendTerm(sum,i.exp)
      i = i.next
      j=j.next

while(i!=None):
  result.appendTerm(i.coef,i.exp)
  i = i.next

while(j!=None):
  result.appendTerm(j.coef,j.exp)
  j = j.next
  
  
target = result.header
for _ in range(result.polysize):
  target = target.next
  print(target.coef,target.exp,end=' ')
>>> 3 # N
>>> 5 3 3 2 3 1 # ์ฒซ๋ฒˆ์งธ ๋‹คํ•ญ์‹
>>> 3 # M
>>> 2 6 2 3 1 0 # ๋‘๋ฒˆ์งธ ๋‹คํ•ญ์‹

2 6 7 3 3 2 3 1 1 0

๋‹คํ•ญ์‹์˜ ๋ง์…ˆ์ด ์ž˜ ์ˆ˜ํ–‰๋˜๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90
๋Œ“๊ธ€์ˆ˜0