전체 글 102

투포인터 알고리즘 구현해보기

투포인터 알고리즘 : 배열의 인덱스를 나타내는 두개의 포인터를 설정하고, 이를 옮겨가면서 내가 원하는 값을 찾는 알고리즘 ex) [1, 5, 4, 6, 4] 에서 연속된 배열의 합이 10인 배열의 인덱스를 모두 찾아라. start : 0, end : 0, array : [1] , sum : 1 / sum이 10보다 작음. end 증가 start : 0, end : 1, array : [1, 5] , sum : 6 / sum이 10보다 작음. end 증가 start : 0, end : 2, array : [1, 5, 4] , sum : 10 / sum이 10 찾음. start 증가 start : 1, end : 2, array : [5, 4] , sum : 9 / sum이 10보다 작음. end 증가 st..

페이지 교체 알고리즘 (FIFO, LRU)

페이지 교체 알고리즘 : 메모리를 효율적으로 사용하기 위해서 어떤 데이터를 메모리에 적재할지 결정하는 알고리즘 FIFO : First In First Out 메모리에 가장 먼저 올라온 페이지를 가장 먼저 교체함. 메모리에 올라오는 순서가 0, 4, 6, 5, 4, 7, 8 이고 메모리의 크기가 3일때, [0] [0, 4] [0, 4, 6] [4, 6, 5] [4, 6, 5] # cache hit [6, 5, 7] [5, 7, 8] 이런식으로 메모리에 적재됨. LRU : Least Recently Used 가장 오랫동안 사용되지 않은 페이지를 먼저 교체. 메모리에 올라오는 순서가 0, 4, 6, 5, 4, 7, 8 이고 메모리의 크기가 3일때, [0] [4, 6] [4, 6, 5] [6, 5, 4] # c..

정렬 알고리즘 구현해보기

선택 정렬 배열에서 최솟값을 찾는다. 최솟값이 배열의 맨 앞 원소보다 작으면 자리를 교체한다. 맨 앞의 원소를 제외하고 반복한다. mylist = [199, 22, 33, 12, 32, 64, 72, 222, 233] def 선택정렬(mylist): min_index = 0 # 최소 인덱스 기본을 0으로 count = 0 # 몇번 반복했는지 for _ in range(len(mylist)): # 배열 길이 만큼 반복 for i in range(count, len(mylist)): # count부터 시작(1번 반복했으면 배열 0번째는 젤 작은 수이니 빼고 시작) if mylist[i] < mylist[min_index]: # 배열의 최솟값 인덱스 찾기 min_index = i mylist[count], m..

스택, 연결리스트 구현해보기

1학년때 c언어로 구현하면서 되게 어렵다고 생각했던 기억이 나네.. 노드 클래스 class Node: def __init__(self, data): self.data = data self.next = None def __str__(self): return str(self.data) def __repr__(self): return str(self.data) 스택 클래스 class Stack: def __init__(self, mylist): self.head = Node(mylist[0]) current = self.head for i in range(1, len(mylist)): if current.next == None: current.next = Node(mylist[i]) current = curr..

Python 실습 - 셀레니움으로 크롤링(이었던것)

파이썬 처음 공부할 때 셀레니움으로 크롤링 했던것을 다시 한번 살펴보자 혼자 열심히 구글과 고군분투해서 뿌듯했던 기억이 있다. 물론 지금 보면 코드가 맘에 안든다. 핫딜 게시판을 크롤링해서 csv파일에 중복된 항목이 나올 때 까지 페이지를 넘겨가며 csv파일에 저장하는 방식이다. 모듈 import 많은 import들.. 셀레니움은 크롬드라이버가 계속 속을 썩여서 BeautifulSoup이 더 편한것 같다.. from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui impo..

Python 2023.09.24

Python 실습 - 핫딜 크롤링 해보기

원래 목표는 핫딜 게시판을 크롤링하는 py파일을 만들어서 그걸 매 시간 정각마다 실행되도록 외부 서버를 이용한 후, 만약 새 글이 올라왔으면 나에게 알림을 보내는 것이었지만 아직 그렇게 까지 하기에는 실력이 부족하기도하고 귀찮기도해서 일단 크롤링만 해보았다. 예전에는 셀레니움으로 했었는데 이번엔 BeautifulSoup으로 해봄. 모듈 import from bs4 import BeautifulSoup import requests import re 내가 검색하고싶은 키워드 정하고 url입력한 후, 잘 응답했는지 확인 난 애플워치 스테인리스를 싸게 사고싶으니까 애플워치로 함 mykeyword = '애플워치' # 검색하고싶은 키워드 res = requests.get(f'https://www.fmkorea.co..

Python 2023.09.24

Python(20) BeautifulSoup 크롤링

예전에 bs4랑 Selenium이랑 이미 한번 공부하고 핫딜 사이트 크롤링해서 csv파일로 카테고리별로 나눠서 저장해오는 코드도 연습했었는데 크롬 드라이버 에러 때문에 실행이 안된다.. 자동으로 크롬 버전에 맞는 드라이버 설치해서 돌리는 코드였는데 아직 드라이버는 업데이트가 안되어서 그런듯? 이 부분은 나중에 다시 공부해서 고치는걸로. 기본 세팅 import requests from bs4 import BeautifulSoup response = requests.get('사이트url') # GET방식으로 HTTP요청 # params = {'pa1': 'val1', 'pa2': 'value2'} # response = requests.get('사이트url', params=params) # print(res..

Python 2023.09.22

Python(19) 정규표현식

https://regexr.com/5nvc2 RegExr: Learn, Build, & Test RegEx RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp). regexr.com 여기서 연습 가능 정규표현식 일반 문자열 ^hello : 처음에 나오는 hello hello$ : 마지막에 나오는 hello h.llo : h 다음에 어떤 문자든 1개의 문자(영문, 특수문자, 숫자, 한글 등)이 오며 llo가 나옴 대괄호(택1) h[eao]llo : hello, hallo, hollo를 선택. h[e!ao]llo : hello, hallo, hollo, h!llo 선택. [a-z] : 알파벳 소문자 중 하나 ..

Python 2023.09.22

Python(18) f-string 문법

중괄호 출력하고 싶을 때 value = 'hello' print(f"{value}") # hello print(f"{{value}}") # {value} print(f"{{{value}}}") # {hello} print(f"{{{{value}}}}") # {{value}} print(f"{{{{{value}}}}}") # {{hello}} print(f"{{{{{{value}}}}}}") # {{{value}}} 포맷팅 지정 num = 3.14159 print(f"{num:.2f}") # 출력: 3.14 # 소숫점 두번째 자리까지 표현해라 name = "Alice" print(f"{name:>10}") # 출력: Alice # 10자리에 맞춰서 오른쪽 정렬 something = '볼펜' EA = 2 o..

Python 2023.09.21

Python(17) args, kwargs, 이터레이터와 제너레이터

*args : 가변 아규먼트, 여러가지 인자들을 가변인수로 받음. tuple로 저장 **kwargs : 딕셔너리로 가변인수를 받음. a, b, *c = 10, 20, 30, 40, 50 print(a) # 10 print(b) # 20 print(c) # (30, 40, 50) args 패킹 def func(*args): print(args) # (10, 20, 30) func(10, 20, 30) # 10, 20, 30 => *args => (10, 20, 30) args 언패킹 def func(a, b, c): print(a, b, c) # 10 20 30 args = (10, 20, 30) func(*args) # (10, 20, 30) => *args => 10, 20, 30 kwargs 패킹 d..

Python 2023.09.20