Python 10

[Python] Leetcode 134. Gas station

목차 문제 https://leetcode.com/problems/gas-station/ Gas Station - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 설계&풀이 정말 간만에 머리를 앓았던 문제라서 포스팅한다. 코테에서 자주 보이던 그리디 문제인데, 처음엔 완탐으로 했다가 시간초과가 났다. # 시간초과 풀이... # 한바퀴 만큼 순회 n = len(gas) if n == 1: if gas[0] >= cost[0]: return 0 else: -1 for ..

[Python] 백준 온라인 저지 18870 좌표 압축

목차 문제 https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 설계&풀이 좌표 압축이란, 주어진 좌표를 크기순으로 정렬하는 행위를 말한다. 예를들어 다음과 같은 리스트(좌표) 가 주어졌다고 가정하면.. tempList = [1, 3, 4, 2, 4] # 좌표압축 실행 후 print(tempList) # 결과 ''' [0, 2, 3, 1, 2] ''' 이런식으로, 오름차순 정렬 기준으로 1은 0번째 ..

[Python] 백준 온라인 저지 17609 회문

목차 문제 https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 설계&풀이 처음엔 별다른 알고리즘을 생각하지 않고 그냥 for문 돌려서 풀려고 했다. 그런데 결과는 시간초과. 뭘까 뭘까.. 생각을 하다가, 투포인터가 생각나서 투포인터로 풀어봤는데, 정답이었다. 처음 코드는 다음과 같다. ''' 1. 일반적인 회문 판단 함수, 정답을 출력하는 함수 두개로 나뉘어서 작업해주자 ''' import sys t = int(input()) # 0, 1, 2중 하나 출력해주는 함수 def p..

[Python] 백준 온라인 저지 1764

목차 문제 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 설계&풀이과정 먼저 시간초과가 난 내 코드다. import sys # 시간초과 풀이 n, m = map(int, input().split()) hPeople = [ sys.stdin.readline().rstrip() for _ in range(n) ] sPeople = [ sys.stdin.readline().rstrip() for _ in range(m) ] answer = [] ..

[알고리즘 이론] 다익스트라(Dijkstra), 최단 경로 알고리즘

목차 이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 다익스트라 최단 경로 알고리즘은 그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다 다익스트라 최단 경로 알고리즘은 ‘음의 간선’이 없을 때 정상적으로 동작한다. 음의 간선이란, 0보다 작은 값을 가지는 간선을 의미하는데, 현실 세계의 길(간선)은 음의 간선으로 표현되지 않으므로 다익스트라 알고리즘은 실제로 GPS 소프트웨어의 기본 알고리즘으로 채택되곤 한다. 다익스트라 최단 경로 알고리즘은 기본적으로 그리디 알고리즘으로 분류된다. 매번 ‘가장 비용이 적은 노드’를 선택해서 임의의 과정을 반복하기 때문이다. 참고 https://www.youtube.com/watch?..

[Python] 백준 온라인 저지 1003

목차 문제 https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 설계 및 풀이 DP 문제이다. 사실 문제 유형을 어떻게 알아내는지는 좀 더 문제를 풀어봐야 알 것 같다. 처음엔 재귀로 풀었는데, 재귀로 풀다보니 시간 초과가 되어서 뭘까 고민하다가 결국 답지를 봤는데.. DP더라... 먼저, 재귀로 푼 코드다. cntZero = 0 cntOne = 0 def fibonacci(n): global cntZero global cntOne if n == 0: cntZero += 1 return 0 elif n == 1: cntOne += 1 return..

[Python, MySQL] txt파일 csv파일 변환 및 데이터 가공 (feat. db 연동)

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 한국어 감성사전에 등재되있는 txt파일을 csv 형태로 가공하고, 이를 파이썬을 통해 DB로 연결 후, 삽입해보는 과정을 진행하고자 한다. 진행 과정 1. 번잡한 txt파일을 csv형태로 넣기 쉽게 데이터 가공하기 먼저 기존의 txt파일의 형태를 봐보자, 다음과 같다. 뭐.. 엄청 많지만 윗부분만 따로 떼온것이다. 그런데 우리는 csv파일을 만들어서 db에 넣을것이다. 그게 더 사후관리도 편할것이고, 한눈에 보기도 좋기 때문일것. 문제를 살펴보면 제약 조건은 다음과 같다. 단어, 어근, 감성이라는 단어는 지워져야 한다. 중간중간 단어 한 세트간의 공백도 지워져야 한다. 감성: ~~ 라인엔 마지막에 ,(콤마) 가 붙지 않고, 개행처리를 해줘야한..

[Python] 네이버 기사 댓글 크롤링하기 2.0v

이 포스팅은 Notion에서 작성 후 재편집하여 포스팅 된 글입니다. 개요 이전에 썼던 코드를 다시 쓰려고했는데, 갑자기 동작이 안됐다. 이유를 보니, 네이버의 html코드의 속성 id값이나 이런것들이 바뀌어서 그랬다. 그래서 앞으로 이런 일이 있을 떄, 대처하기 쉽게 하기 위해서도 있고.. 무엇보다 시간이 너무 오래걸렸다 555개의 댓글을 긁어모으는데 거의 40초가량이나 걸려서.. 다른방법을 모색하고 있긴 했다. 근데 너무 갓-벽한 코드가 있어서 그냥 긁어와서 url만 바꾸니 잘 작동되길래.. 어떻게 돌아가는지만 공부하는 용도로 포스팅하고자 한다. 해당 코드의 전문은 다음 블로그에서 가져왔다. blog.naver.com/seodaeho91/221273565367 네이버 뉴스 댓글 크롤링 안녕하세요 이번..

[Python] 네이버 뉴스 기사 댓글 크롤링하기(Feat. Selenium, Webdriver)

오늘의 목표 네이버 뉴스 기사의 정보 크롤링하기 해당 기사에 달린 댓글들의 남녀 성비, 연령대별 비율, 댓글 및 등록시간 크롤링 참고 1. 기사 크롤링하기 https://hogni.tistory.com/69 파이썬 네이버 뉴스 기사 크롤링하기: 초보자도 실행할 수 있는 코드 이전에 뉴스 알림 봇을 만드는 내용을 작성했던 적이 있습니다. 당시에는 네이버 모바일 버전에서 뉴스 기사를 가져오는 방법을 사용했었는데, PC 버전에서는 어떻게 할 수 있는지 여쭤보시는 �� hogni.tistory.com 2. 댓글 크롤링 예제 - https://blog.pignu.kr/2018/03/26/naver_crawling.html 네이버뉴스 댓글 크롤링 with python 간단히 해보는 네이버 댓글 크롤링 blog.pi..

[Pycharm] 파이참에서 패키지 설치하기

개요 파이썬에서 패키지를 설치할 땐 두가지 방법이 있다. 명령 프롬프트와 python -install 명령어를 통해 설치하는것과 파이참과 같은 IDE에서 제공하는 패키지를 다운받는 방식이다. 둘 다 어느것을 사용해도 상관없지만, 대부분 파이참을 이용해서 개발하므로 메모해둔다. 진행 과정 별거 없다. 설정(ctrl + alt + s)을 들어가서 project:Python - Project Interpreter에 들어가면 현재 설치된 패키지를 한눈에 확인이 가능한데, 여기서 우측의 +를 눌러보자 그럼 다음과 같은 창이 뜰텐데, 여기서 그냥 원하는 패키지 검색하고 install 눌러서 설치만 해주고 import해서 쓰시면된다. 간단!