본문 바로가기

파이썬72

백준 - 10828번(스택) 문제 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 코드 import sys class Stack: def __init__(self): self.stk = [None] * 10000 self.ptr = 0 def push(self, value): self.stk[self.ptr] = value self.ptr += 1 def pop(self): self.ptr -= 1 if self.ptr < 0: self.ptr = 0 r.. 2020. 11. 4.
알고리즘 - 스택(stack) 스택은 데이터를 임시 저장할 때 사용하는 자료구조로 데이터를 꺼낼 때는 가장 마지막에 넣은 것을 가장 먼저 꺼냅니다. 스택에 데이터를 넣는 작업을 Push라 하고, 데이터를 꺼내는 작업을 Pop이라고 합니다. 위 그림과 같이 가장 아래쪽을 바텀이라하고 가장 먼저 들어간 데이터입니다. 그리고 가장 위쪽을 탑이라하며 위쪽에 있을 수록 나중에 들어간 데이터입니다. 스택도 2개의 파일로 나누어 하겠습니다. fixed_stack.py from typing import Any class FixedStack: #고정 길이 스택 클래스 class Empty(Exception): #비어 있는 FixedStack에 팝 또는 피크할 때 내보내는 예외 처리 pass class Full(Exception): # 가득 찬 Fix.. 2020. 11. 3.
알고리즘 - 해시법(3) 이번에는 해시법 중에서 오픈 주소법입니다. 오픈 주소법은 충돌이 발생했을 때 재해싱으로 빈 곳을 찾는 방법을 말합니다. ㅡ 14 ㅡ 29 ㅡ 5 6 ㅡ 이렇게 배열이 있을 때, 칸 하나하나를 버킷이라고 부릅니다. 만약 숫자를 추가해야 하는데 버킷이 이미 다른 숫자가 들어와 있다면 빈 버킷을 찾아 이동하게 만드는 것입니다. 오픈 주소법도 체인법과 마찬가지로 파일을 2개로 분리하겠습니다. open_hash.py from __future__ import annotations from typing import Any, Type from enum import Enum class Status(Enum): OCCUPIED = 0 EMPTY = 1 DELETED = 2 class Bucket: def __init__(.. 2020. 11. 2.
알고리즘 - 해시법(2) 저번 포스팅에 이어서 체인법입니다. 이번에는 노드를 key, value, next 이렇게 세 가지로 구성해서 key 값도 넣겠습니다. 또한 value가 str형일 때 hashlib을 사용해 해시값을 구해보겠습니다. chain_hash.py from __future__ import annotations from typing import Any, Type import hashlib class Node: def __init__(self, key: Any, value: Any, next: Node) -> None: self.key = key # 키 self.value = value # 값 self.next = next # 뒤쪽 노드 참조 class ChainHash: def __init__(self, capac.. 2020. 10. 27.