2023/08/29 개발일지 (코딩테스트, 파이참 오류, 연결리스트, 스택)

장현웅·2023년 8월 29일
0

1. 코딩테스트


회고

# 1
맨 앞에 부호(+, -)가 올 수 있다.'라는 조건에서 이것이 이 문제의 key가 되는 조건이라고 생각이 들었다.

# 2
슬라이싱(slicing) : 연속적인 객체(list, tuple, string, etc)들에 범위를 지정해서 선택한 객체들을 가져오는 방법

s = 'slicing'

print(s[1])			# l
print(s[2:4])		# ic, s[2]부터 s[4] 전까지 총 4-2 = 2개
print(s[4:])		# ing, s[4]부터 끝까지
print(s[4:])		# slic, s[4]전까지 4개!
print(s[:])			# 처음부터 끝까지!

print(s[-1])		# g, 뒤에서 첫 번째
print(s[-2])		# n, 뒤에서 두 번째
회고

처음에는 '제곱근을 어떤 식으로 표현하지?' 라고 생각하느라 한참 멍을 때렸지만 핵심은 'x를 정의해주는 것'이라는 결론이 나왔다. 
n은 주어지고 x를 구해야하는데 그것을 식으로 표현해도 x가 정의되지 않으면 'NameError: name 'x' is not defined'이런 에러가 날 것이다.

2. 파이참 오류


파이참 설정 > General > Console > Default Encording : ( x-windows-949 -> UTF-8 )

3. 연결리스트


  • 연결리스트 : 네모상자(값)와 화살표(다음 값의 주소)가 반복
네모 상자 1개 + 화살표 1개

class ListNode:
  # def __init__(self, val=0, None) : 기본값을 지정하는 문법
    def __init__(self, val, next): 	# 받을 값. self: (생성한 인스턴스 객체)나 val: 값 next: 다음 값의 주소
        self.val = val             	# 받은 값을 저장. self.val = val: 나의 value = 값
        self.next = next           	# self.next = next: 나의 next = 다음 값 주소

1. 리스트를 입력 받음.

class LinkedList:                   # 삽입, 삭제 기능이 있어야함.
    def __init__(self):
        self.head = None            # 3번째 메모리 박스로 접근하려면 1번째 박스로 가서 순차적으로 접근할 수 밖에 없는데 이때, 1번째 박스를 head라고 하자.
                                    # 'None': 아직 아무 데이터도 안 들어왔다. (or ListNode(None,None))
                                    
    def append(self, val):
        if not self.head:                   # 만약, head가 없으면
            self.head = ListNode(val, None) # 다음 값(요소)은 없고 입력 받은 값을 넣어주는 ListNode를 만들어서 head라고 하자.
                return                      # 왜 다음은 없는 ListNode 박스를 만드냐 : 하나하나 붙여주는데 마지막 박스에는 다음 값을 넣어주기 전까지는 화살표(다음 값의 주소)는 None일 것이다.

        node = self.head                    # 내가 바라보고 있는 노드를 head라고 한다.
        while node.next:                    # node에 다음이 있는 한, 화살표가 존재하는 한
            node = node.next                # 다음으로 계속 넘어감.  while문이 끝났을 때 바라보고 있는 node는 제일 끝 node일 것.

        node.next = ListNode(val, None)     # ListNode 박스를 새로 하나 만들어서 다음 node에 붙여준다. = append

2. self.head가 없으면 ListNode 박스를 넣음.
3. head가 이미 있다면, 쭉 넘어가서 마지막에 박스를 넣어준다.

lst = [1,2,3]               # LinkedList화 시켜보자.
l1 = LinkedList()           # LinkedList 객체를 하나 만든다.
for e in lst:
    l1.append(e)            # lst에 있는 모든 요소를 l1에 append하고 node들에 어떻게 들어가 있는지 보자.
    print(l1)

4. 스택


  • 스택의 자료 구조는 "빨래통"을 생각. Last In First Out(LIFO) : 후입선출
class Node:									# Node의 정보
    def __init__(self, item, next):			# Node가 가져야 하는 것들 item = 내가 어떤 값을 가져야하는지, next = 내가 가리키는게 뭔지
        self.item = item					# 내 값은 item이다.
        self.next = next					# 내가 가리키고 있는 것은 next이다.


class Stack:								# 스택의 정보
    def __init__(self):						# 일단 쌓인게 없으니 top이 비었다는 것을 표시
        self.top = None

    def push(self, value):					# Node를 만들어 넣어주는데 받은 value(값)을 넣어주고 새로운 탑이 되는 이 Node가 가리키는 것은 기존에 있던 top이다.
        self.top = Node(value, self.top)

    def pop(self):
        if self.top is None:				# top이 없으면 꺼낼게 없으니 None을 반환
            return None						# top을 꺼낸 후 다음 top이 없을 때 오류나는 것을 방지하기 위한 코드

        node = self.top						# top이 있다면 제일 위에 있는 top을 꺼내고
        self.top = self.top.next			# 다음 top이 top이 된다.

        return node.item					# 꺼낸 top의 값을 반환

    def is_empty(self):						# top이 비어있는지 아닌지를 판단해서 반환
        return self.top is None

- 연결리스트와 스택은 직접 간단하게 구현해볼 수 있어야 하니 여러 개 만들어볼 생각이다.

5. 개발 아이디어 짜보기


같은 지역의 독거 노인이나 한 부모 가정, 소년/소녀 가장 등 생계가 위태로운 가정에서 당장 필요한 물품들을 위시리스트에 넣어놓는다.

사용자들은 위시리스트의 물품 금액을 기부하고 결제금의 일정 퍼센트의 지역 상품권을 받는다.

0개의 댓글