[TIL_Carrotww] 10 - 22/09/13

μœ ν˜•μ„Β·2022λ…„ 9μ›” 13일
0

TIL

λͺ©λ‘ 보기
12/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 Linked_list μ™„λ²½ 이해

πŸ” μž‘μ„€

  • μ˜ˆμ „μ— μ•Œκ³ λ¦¬μ¦˜ 문제둜 처음 Linked_listλ₯Ό 처음 μ ‘ν–ˆμ„ λ•ŒλŠ” μ™„μ „νžˆ 이해가 가지 μ•Šμ•„ 어렴풋이 μ΄ν•΄ν•˜κ³  λ„˜κ²Όμ—ˆλ˜ 기얡이 μžˆμ§€λ§Œ 각작고 κ³΅λΆ€ν•˜λ‹ˆ 눈 감고 지 수 μžˆμ„μ •λ„λ‘œ μ΄ν•΄ν•˜μ˜€λ‹€.
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Linked_list:
    def __init__(self, data):
        self.head = Node(data)
    
    def append(self, data):
        if self.head is None:
            self.head = Node(data)
            return
        
        cur = self.head
        while cur.next is not None:
            cur = cur.next
        cur.next = Node(data)
    
    def print_all(self):
        cur = self.head
        while cur is not None:
            print(cur.data)
            cur = cur.next
    
    def get_node(self, index):
        cnt = 0
        node = self.head
        while cnt < index:
            node = node.next
            cnt += 1
        
        return node
    
    def add_node(self, index, value):
        input_node = Node(value)
        if index == 0:
            input_node.next = self.head
            self.head = input_node
            return
        
        current_node = self.get_node(index - 1)
        current_next_node = current_node.next
        input_node.next = current_next_node
        current_node.next = input_node
    
    def del_node(self, index):
        if index == 0:
            self.head = self.head.next
            return
        current_node = self.get_node(index - 1)
        current_node.next = current_node.next.next

πŸ” TIP

  • ν΄λž˜μŠ€μ— λŒ€ν•œ μ™„λ²½ν•œ 이해λ₯Ό ν•œ ν›„ Linked Listλ₯Ό μ ‘ν•˜λ‹ˆ μ™„λ²½νžˆ 이해가 λ˜μ—ˆλ‹€.

🧲 μ•Œκ³ λ¦¬μ¦˜

πŸ”— Programmers νƒ€κ²Ÿ λ„˜λ²„ Level2

πŸ” μž¬κ·€λ‘œ ν’€ 수 있고 BFS, DFS 둜 ν’€ 수 μžˆλŠ” λ¬Έμ œμ΄λ‹€.

  • λ§ˆμ§€λ§‰ 방법이 λ‚΄ 풀이고 μœ„ λ‘˜ ν’€μ΄λŠ” 이뻐 λ³΄μ΄λŠ” λ‹€λ₯Έ λΆ„λ“€μ˜ 풀이λ₯Ό μ°Έκ³ ν•˜μ—¬ ν’€μ–΄λ³΄μ•˜λ‹€.

πŸ’‘ Tree ν˜•νƒœλ‘œ 초기 result list λ₯Ό μ΄ˆκΈ°ν™” ν•˜μ—¬ 값을 λ”ν•œ temp 리슀트λ₯Ό μΆ”κ°€ν•΄μ£Όμ–΄ λ‚˜μ˜¨ tree ν˜•νƒœμ—μ„œ target 의 개수λ₯Ό μ°Ύμ•„ return ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€.

def plus_or_minus(numbers, target):
    result = [0]
    for num in numbers:
        temp = []
        for re in result:
            temp.append(re + num)
            temp.append(re - num)
        result = temp
    return result.count(target)

πŸ’‘ μž¬κ·€λ‘œ ν’€μ—ˆμœΌλ©° ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ‹΅μ•ˆ 맨 첫번째 μžˆλŠ” κΈ°κ°€λ§‰νžŒ 풀이이닀.

def pm2(numbers, target):
    # Recursive_version
    if not numbers and target == 0:
        return 1
    elif not numbers:
        return 0
    else:
        return pm2(numbers[:-1], target-numbers[-1]) + pm2(numbers[:-1], target+numbers[-1])

πŸ’‘ λ‚˜λŠ” pop() 을 ν•˜λŠ”κ²ƒμ΄ 무쑰건 λΉ λ₯Ό 것 κ°™μ•„ stack ꡬ쑰λ₯Ό μ“°λŠ” μƒκ°μ˜ ν‹€ μ•ˆμ—μ„œ λ²—μ–΄λ‚˜μ§€ λͺ»ν•˜μ—¬ κ°ˆν”Όλ₯Ό λͺ»μž‘μ•˜μ—ˆμ§€λ§Œ 배운 것을 ν™œμš©ν•˜μ—¬ μœ„μ™€ λΉ„μŠ·ν•˜κ²Œ ν’€μ–΄λ³΄μ•˜λ‹€.

def pm3(numbers, target):
    # Recursive_version
    if not numbers and target == 0:
        return 1
    elif not numbers:
        return 0
    else:
        temp_list = copy.deepcopy(numbers)
        temp = temp_list.pop()
        return pm3(temp_list, target-temp) + pm3(temp_list, target+temp)

🧲 λŠλ‚€μ 

πŸ” μž¬κ·€ 즉 BFS, DFS κ°€ μ΅μˆ™ν•˜μ§€ μ•Šλ‹€.
μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ— κ°€μž₯ 많이 λ‚˜μ˜€λŠ” ν˜•νƒœμΈ 만큼 더 많이 μ—°μŠ΅ν•΄μ•Όκ² λ‹€.

profile
Carrot_hyeong

0개의 λŒ“κΈ€