1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 스택 수열 문제는 stack의 push와 pop 연산을 조합하여 1~n까지의 숫자를 원하는 수열의 형태로 뽑아내는 방법을 출력하는 문제다. 이때 push는 +, pop은 -로 출력한다. 예를 들어, 1~5로 만들 수 있는 수열 중 "4 3 5 2 1"을 만들고 싶다면 "push push push push pop pop push pop pop pop"을 수행하면 된다. 이를 +, -..
분류 전체보기
9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 해당 문제는 괄호가 올바르게 쳐져있는지를 확인하는 문제다. 이는 아래와 같은 원리로 코드를 작성할 수 있다. 괄호가 올바르게 나오는 경우는 '('와 ')'의 개수가 같은 경우다. 단, 개수가 같아도 )(의 경우 올바르지 않은 경우다. 따라서 우리는 수식이 올바른지 판단하기 위한 변수 하나를 선언할 것이다. 단, 초깃값이 0인 변수를 만들고 '('가 나온 경우는 +1, ')'가 나오는 경우는 -1을 더해주자. 해당 코드는 아래와 같이..
10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 기본적인 스택을 구현하는 문제였다. import sys input = sys.stdin.readline n = int(input()) stack = list() for i in range(n): operation = input().split() if operation[0] == "push": stack.append(operation[1]) elif operation[0] == "pop": if len(stack) == 0: print(-1) el..
1. 셀레니움 기초 이전에 배운 requests의 경우 웹 사이트에 요청을 보내고, BeautifulSoup로 원하는 정보를 가지고 왔다. 하지만 해당 방법은 동적 사이트 크롤링 등에 한계가 있다. 이를 위해 셀레니움을 사용할 수 있다. 셀레니움은 웹 어플리케이션 테스트를 위한 도구로 탄생했고, 브라우저를 띄워서 사람처럼 동작하게 만들 수 있다. 이 덕분에 스크롤될 때 데이터가 추가되는 동적 사이트 등을 크롤링 할 수 있다. 먼저 셀레니움 설치를 위해 다음 명령어를 터미널에 입력하자. pip install selenium 추가적으로 셀레니움을 이용하면서 크롤링을 진행할때 편리한 webdriver_manager를 설치하자. 셀레니움을 사용하면 크롬 브라우저 버전이 업데이트 되면 그에 맞는 크롬 드라이버를 ..
1. 사이트 분석 먼저 사이크 분석을 위해 네이버 증권 사이트에 접속한다. https://finance.naver.com/item/sise.naver?code=105560 이때 파라미터로 "105560"이라는 코드를 넘겨주는 것을 확인할 수 있다. 이 코드는 "국민은행"의 코드로 만약 다른 기업의 정보를 검색하면 해당 코드가 변경될 것이다. 따라서 우리는 해당 값을 변경함으로써 여러 기업의 주식 데이터를 수집할 수 있다. 그리고 나는 주식 데이터의 현재가에 대해 크롤링하려고 한다. 이때 현재가 값이 적힌 태그의 id는 "_nowVal"인 것을 확인했다. 해당 예제를 위해 다음과 같이 코드를 작성할 수 있다. import requests from bs4 import BeautifulSoup codesDic..
1. 기본 방법 우리가 네이버에 어떤 검색을 수행하고, 기사만 살펴보면 아래와 같은 기사들이 뜬다. 이때 해당 기사들의 제목 및 URL의 태그를 보면 class값으로 "news_tit"값을 가지는 것을 확인할 수 있다. 따라서 우리는 BeautifulSoup의 select 메서드를 활용하며 원하는 페이지의 기사들의 제목 및 url 같은 정보들을 가져올 수 있다. 예시는 아래와 같다. import requests from bs4 import BeautifulSoup response = requests.get("https://search.naver.com/search.naver?ssc=tab.news.all&where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%..
1. HTML HTML은 웹페이지의 구조를 나타내기 위한 언어로 태그로 구성된다. 태그는 꺾쇠 괄호로 표시되며 "시작 태그"와 "종료 태그"로 이루어지며 속성명과 속성값이 있을 수 있다. 예를 들어 아래와 같은 형태를 가진다. Content 크롤링에서 자주 사용되는 태그는 다음과 같다. 태그명 역할 예 div 구역 분할 Content a 링크 Naver h1 제목 Title p 문단 Paragraph ul, li 목록 Americano Latte Tea Chamomile Peppermint 태그에는 부모 태그와 자식 태그가 있다. 예를 들어 아래와 같은 형태를 가진다. Content1 Content2 2. Requests Requests란 HTTP 통신을 위한 파이썬 라이브러리이다. HTTP 통신은 요청..
1. Connection Pool이란?데이터베이스 커넥션을 획득할 때는 다음과 같은 과정을 거친다.사용자가 요청을 보낸다.애플리케이션 로직은 DB Driver를 통해 커넥션을 조회한다.DB 드라이버는 DB와 "TCP/IP" 커넥션을 연결한다. DB 드라이버는 3 way handshake 이후 connection이 연결되었다면, ID, PW, 부가정보 등을 전달한다.DB는 받은 정보로 내부 인증을 완료하고, 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해 클라이언트에게 반환한다.결국 위와 같은 과정을 거쳐 커넥션이 반환된다. 하지만 이 과정은 너무 복잡하고, 시간도 많이 소요된다. 이런 문제를 해결하기 위해서 커넥션을 미리 생성하고, 사용하는 커넥션 풀..