분류 전체보기

Tech/Web Scrapping

Selenium 활용법

네이버 접속 후 로그인 버튼 클릭 + 검색 창에 검색 단어 입력 후 키보드 엔터 누르기 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys browser = webdriver.Chrome() browser.get("https://www.naver.com") elem = browser.find_element(By.CLASS_NAME, "MyView-module__link_login___HpHMW") elem.click() broswer.back() browser.forward() elem = browser.find_element(By.ID,..

Tech/CI CD

Jenkins 파일 작성법

pipeline { // 스테이지 별로 다른 거 // 어떤 노예를 쓸 것인가 agent any triggers { pollSCM('*/3 * * * *') } environment { AWS_ACCESS_KEY_ID = credentials('awsAccessKeyId') AWS_SECRET_ACCESS_KEY = credentials('awsSecretAccessKey') AWS_DEFAULT_REGION = 'ap-northeast-2' HOME = '.' // Avoid npm root owned } stages { // 레포지토리를 다운로드 받음 stage('Prepare') { agent any steps { echo 'Pulling Repository' git url: 'https://gith..

컴퓨터 사이언스/Algorithm

다이나믹 프로그래밍

문제를 쪼개서 작은 문제의 답을 구하고, 그걸로 더 큰 문제의 답을 구하는 것을 반복하는 알고리즘 분할정복과 비슷한 느낌이다. DP 구현 2가지 방법 Top-down 구현 방법: 재귀 저장 방식: Memoization Bottom-up 구현 방법: 반복문 저장 방식: Tabulation Memoization 한 번 구한 답들은 저장해두자는 저장 방식이다. 즉, 부분 문제들의 답을 한 번 구했으면, 또 구하지 않도록 (중복연산 방지) cache에 저장해두고, 다음부터 가져다 쓰는 방식 필요한 부분 문제들만 구한다. (Lazy-Evaluation) Tabulation 부분 문제들의 답을 미리 다 구해두면 편하다. 테이블을 채워간다는 의미이다. 필요 없는 부분 문제들까지 전부 구한다. (Eager-Evalua..

컴퓨터 사이언스/Algorithm

이진 탐색

탐색 전에 반드시 정렬되어 있어야하고, 범위를 절반씩 줄여가면서 답을 찾아야한다. 시간복잡도 따라서 정렬 O(NlogN) + 이진탐색 O(logN) -> 결과적으로 O(NlogN). 즉, 경우에 따라서 선형탐색 O(N) 이 더 좋은 선택이 될 수도 있다. 하지만 여러번 탐색을 해야하는 경우라면, 그 탐색의 횟수가 N번이라면, 선형 탐색의 경우에는 N * O(N) = O(N^2) 이 된다. 그러나 이진 탐색을 하면, 정렬 O(NlogN) + N * O(logN) = O(NlogN)이 된다. 결론 결과적으로 탐색을 한번만 하는 경우에는 굳이 정렬을 해가면서 이진탐색을 사용할 이유가 없다. 하지만 탐색을 여러번 해야하는 경우에는 정렬 한번 해두고, 이진탐색을 해주는게 더 빠를 수 있다. C++ lower/up..

컴퓨터 사이언스/Algorithm

백트래킹

기본적으로 모든 경우를 탐색하며, DFS/BFS와 방식은 유사하다. 하지만 백트래킹은 가지치기를 통해 탐색 경우의 수를 줄인다는 차이가 있다. 정리하면, 백트래킹은 최악의 경우에는 모든 경우를 다 살펴보게 될 수도 있지만, 가지치기를 통해서 가능한 덜 보겠다는 전략이다. 가지치기의 원리는 가망성이 없으면 가지 않겠다는 원리를 바탕으로 한다. 어려운 문제일수록 극한의 가지치기를 요구할 수 있음

컴퓨터 사이언스/Algorithm

DFS와 BFS에서 인접행렬 vs 인접리스트

시간복잡도 인접행렬: O(V^2) 인접리스트: O(V + E) == O(max(V,E)) 정점의 개수와 간선의 개수 중 더 큰 값을 기준으로 인접리스트는 간선의 개수가 적을수록 메모리 공간을 덜 잡아먹는 장점이 있었음 만약 간선의 개수가 V에 비해 월등히 적으면 O(V)로 표현이 될 수 있음 즉, 간선 개수가 적으면 인접리스트가 훨씬 유리해진다.

컴퓨터 사이언스/자료구조

트리

순환성이 없는 무방향 그래프이다. 특징 특정하지 않는한 어떤 노드든지 root가 될 수 있다. 가장 바깥쪽 노드는 leaf node이다. node A에서 node B로 가는 경로는 반드시 존재하며 유일하다. (단 1개) 노드개수 = 간선개수 + 1 자료구조에서의 트리 부모 -> 자식 관계가 있는 방향 그래프이며, root는 하나다.

컴퓨터 사이언스/자료구조

그래프

구성요소 Vertext(node) edge 그래프 종류 방향성 무방향 그래프(양방향 그래프) 방향 그래프 순환성 순환 그래프(Cyclic Graph) 비순환 그래프(Acyclic Graph) 방향성 비순환 그래프(DAG. Directed Acyclic Graph) VCS (Version Control System) 버전 관리 시스템으로 대표적으로 git과 github가 있다. 또한 이는 대표적인 방향성 비순환 그래프이다. 연결 요소(Connected Component) 아래 그림은 연결요소가 3개인 그래프이다. 코드로 그래프를 나타내는 방법 인접행렬 인접리스트 인접행렬 vs 인접리스트 둘 중에 뭘 써야할까? 여기에서 시간과 공간 사이의 trade off를 알 수 있다. 메모리 공간 인접행렬 노드가 n개이..

Tech/CI CD

EC2에 젠킨스 설치하기

젠킨스 홈페이지에서 권장하는 자바 17버전을 사용했다. sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key sudo yum upgrade wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm sudo rpm -ivh jdk-17_linux-x64_bin.rpm sudo alternatives --config java java -version sudo yum install jenkins..

Tech/CI CD

Jenkins를 활용한 CI/CD

정의 각각의 개발자들이 개발하는 환경을 사용자(내부 QA 엔지니어, 백엔드, 프론트엔드 개발자 등 포함)에게 지속적으로 배포가되고, 각 사용자들의 코드가 자동적으로 계속해서 합쳐지는 것이다. 이러한 과정에는 코드를 빌드하고, 테스트하고 배포하는 활동이 있다. 젠킨스 시종. 개발자는 코드만 짜고, 나머지 귀찮은 작업들을 젠킨스에게 맡긴다. Java Runtime 위에서 동작하는 자동화 서버이다. 빌드, 테스트, 배포 등 모든 것을 자동화해주는 서버이다. 젠킨스는 빈 껍데기 -> 다양한 플러그인들을 활용해서 각종 자동화 작업을 처리할 수 있다. 그 플러그인들을 조립해서 잘 돌아가게 하는 것 -> 일련의 자동화 작업의 순서들의 집합인 pipline을 통해 CI/CD 파이프라인을 구축한다. 젠킨스 플러그인 대표..

kimjingyu
'분류 전체보기' 카테고리의 글 목록 (15 Page)