DAY39 : TIL

안휘원·2021년 10월 21일
1

spartacodingclub

목록 보기
24/39

📚 LECTURE

▶ ARRAY와 LINKED LIST

  • Array
    - like 캡슐호텔
    - 크기가 정해진 데이터의 공간. 변경 불가.
    - 중간 삽입/삭제 시 모든 원소를 옮겨야 함.
      (배열의 길이 N만큼 = 시간복잡도 ↑)
    - 장점: 데이터에 접근 빈도 높을 때 유용.
      단점: 원소 새로 추가 시, 새 공간 할당 필요 = 매우 비효율적

  • Linked List (List)
    - like 화물열차
    - 크기가 정해지지 않는 데이터의 공간.
      이어주기만 하면 얼마든지 추가 가능.
    - 앞 뒤 포인터만 변경하면 중간 삽입/삭제 가능.
      (포인터 = 연결고리, 노드 = 화물칸)
    - 장점: 수정(삽입/삭제) 빈도 높을 때 유용.


▶ 💡 EXERCISE

# [3] -> [4]
# data, next

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


node = Node(3)
first_node = Node(4)
node.next = first_node


# print(node.next.data)


class LinkedList:
    def __init__(self, data):
        self.head = Node(data)

    def append(self, data):
        if self.head is None:  # self.head 값이 None인 경우,
            self.head = Node(data)  # self.head에 Node의 data를 담아 대입해주고,
            return  # 그리고 나서, 함수 중단

        self.head.next = Node(data)
        cur = self.head  # cur의 위치를 head로 지정 = [3]
        while cur.next is not None:  # cur의 next가 Node가 아닐 때까지
            cur = cur.next  # cur.next를 이용하여 cur의 위치를 한 칸씩 이동
        cur.next = Node(data)  # 끝에 도달했을 때, cur.next에 Node의 데이터를 담아서 대입

    def print_all(self):
        cur = self.head  # cur에 self.head 저장
        while cur is not None:  # cur이 None이 아닐 때까지
            print(cur.data)
            cur = cur.next  # cut을 next로 한 칸씩 이동


# head -> -> -> -> -> -> -> ->
# [3] -> [4] -> [5] -> [6] -> [new] (이 자리가 None임)
# [3] = cur인 경우, [4] = cur.next / [4] = cur인 경우, [5] = cur.next이다.
# 끝의 자리인 None까지 가려면, while cur.next == None: 사용.

linked_list = LinkedList(3)

linked_list.append(4)
linked_list.append(5)
linked_list.print_all()

  • 문제점:
    - 실행하면 3 4 5 가 출력되어야 하는데, 자꾸 3 5 5 가 출력된다.

  • 시도:
    - 아직 원인 파악 중ㅠ_ㅠ 하나하나 다시 뜯어서 주석까지 달아가며 살펴봤는데, 어디서 오류가 난 건지 모르겠다.

    • head = cur = [3] 맞음
    • cur = cur.next = [4] 맞음
    • print(cur.data) = [4] 맞음
      ...?
    • 믱😥



📑 FEEDBACK

▼ TODAY'S MEMO :

  • 백준 알고리즘 데일리 테스트 #2741 (우당탕탕 미션):
    - 드디어 이번엔 풀이 검색하지 않고 혼자서 풀었다!
      '정답입니다'가 한 번에 떴을 때 너무 기뻤다. 쾌감...👍
      쉬운 난이도겠지만 처음으로 나 혼자 풀고 맞춘 거라 좋다ㅠㅠ

  • 내가 쓴 답 :

# 자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
# 첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

N = int(input())

for N in range(1, N + 1):
    if N <= 100000:
        print(N)
  • 서치한 답 :
n = int(input())

for i in range(1, n+1):  # 1부터 n까지
     print(i)
  • 처음엔 N <= 100000 조건을 왜 안 쓴 거지? 했는데, 문제를 다시 읽어보니 애초에 N의 조건값에 주어진 거라 따로 언급할 필요가 없어서인 것 같다.

  • 아무튼 검색한 답도 내 답과 다르지 않아서 기쁘다! 앞으로도 빼먹지 말고 공부 열심히 해서 정답도 맞추고, 더 깔끔하게 다듬어진 코드를 만들어내야지!



👉 HWON'S GITHUB : 백준 문제 모음 보러가기 👈

profile
우당탕탕 개발자 성장일지

0개의 댓글