공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍 213

[Python] 프로그래머스. 짝지어 제거하기 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들 programmers.co.kr 문자열 파싱으로 작업하면, 1,000,000이라는 문자열 길이 때문..

[Python] 프로그래머스. 가장 먼 노드 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 | 프로그래머스 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 주어진 노드를 토대로 n * n Matrix를 생성할 경우 시간초과가 걸리는 문제. BFS 코드의 효율성보다는 주어진 노드 데이터를 적은 연산비용이 들어가도록 하는 게 관건이었던... 시간초과가 뜨던 코드는 아래와 같았다. from collections import deque, defaultdict def bfs(start, maps, visited): queue = deque() queue.append((start..

[Python] 백준 17142. 연구소 3

https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고, 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되며, 1초가 걸린다. 승원이는 연구소의 바이러스 M개를 활성 상태로 변경하려고 한다. 연구소는 크기가 N×N인 정사각형으로 나타낼 수 있으며, 정사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 www.acmicpc.net 삼성 SW역량테스트 기출문제였다고 한다. BFS와 DFS를 모두 사용하는 문제라고 하는데, Python에서는 '경우의 수'를 뽑아내..

[Python] 프로그래머스. 2018 카카오 Recruit - 추석 트래픽

https://programmers.co.kr/learn/courses/30/lessons/17676 코딩테스트 연습 - [1차] 추석 트래픽 | 프로그래머스 입력: [ 2016-09-15 20:59:57.421 0.351s, 2016-09-15 20:59:58.233 1.181s, 2016-09-15 20:59:58.299 0.8s, 2016-09-15 20:59:58.688 1.041s, 2016-09-15 20:59:59.591 1.412s, 2016-09-15 21:00:00.464 1.466s, 2016-09-15 21:00:00.741 1.581s, 2016-09-15 21:00:00.748 2.31 programmers.co.kr datetime 라이브러리를 써본 적은 없어서 찾아보면서 작업..

[Python] 백준 17298. 오큰수

스택을 사용해 풀 수 있는 문제. _ = input() # len(arr) 값과 똑같아서 패스 arr = list(map(int, input().split())) stack = [] # 값이 없으면 -1을 입력해야 하므로, 기본값으로 -1 설정 result = [-1 for _ in range(len(arr))] # arr 맨 앞부터 시작. i는 각 배열의 index for i in range(len(arr)): # 스택 맨 위의 값 (arr[stack[-1]]) 보다 arr[i]의 값이 더 클 경우 = 오큰수의 정의 while len(stack) != 0 and arr[stack[-1]] < arr[i]: # 스택의 값을 빼고, result에 arr[i] 값을 입력한다. result[stack.pop(..

[Python] 프로그래머스. 숫자 게임 (Level 3)

1. A팀의 최댓값이 B팀의 최댓값보다 크다 = B가 무엇을 내놓아도 이길 수 없다. 포기한다. 2. A팀의 최댓값보다 B팀의 최댓값이 크다 = 이길 수 있다. A팀을 최댓값 -> 최솟값 순서로 정렬하고, B의 최댓값을 빠르게 구할 수 있도록 heapq 라이브러리를 사용한다. import heapq def solution(A, B): # A의 최솟값이 B의 최댓값보다 크면, 이길 방법이 없으므로 0 if min(A) > max(B): return 0 # 최댓값 -> 최솟값 순으로 정렬 A.sort(reverse = True) # 맨 앞에 B의 최댓값이 위치하도록 heapq 자료구조를 사용한다. B = [-i for i in B] heapq.heapify(B) count = 0 for a in A: # 이..

[Python] 백준 1766. 문제집

위상 정렬 문제. Python의 heapq 라이브러리를 활용해서 위상정렬을 구현할 수 있다. import heapq n, m = map(int, input().split()) arr = [[] for _ in range(n+1)] precede = [0 for _ in range(n+1)] heap, result = [], [] for _ in range(m): x, y = map(int, input().split()) arr[x].append(y) # 연결된 간선. x번 문제는 y번보다 먼저 풀어야 한다. precede[y] += 1 # 이어진 노드의 진입차수. # (y번 문제는 몇 개의 선행문제와 연결되어 있는지. 진입차수라 보면 된다) for i in range(1, n+1): if precede[..

성균관대학교 학생회 공약 모아보는 웹페이지 제작 프로젝트(2)

성균관대학교 학생회 공약 모아보는 웹페이지 제작 프로젝트 - (2) 수집한 정보 데이터베이스 모델링하기 171129 Python으로 신문기사를 크롤링한 다음, 4명 팀원이 2014년부터 2017년 중 1년씩 맡아서 총학과 단과대의 공약 이행 데이터를 수집하기로 했다. 보통 성대신문이 제공하는 평가는 9월 무렵 중간평가 형태로 제공되거나, 11월경 최종평가 특집기사 형태로 이루어졌다. 신문기사다 보니 공약의 내용이나 이행여부도 전부 줄글로 쓰여 있다. 그래서 각자 1년치 데이터를 조사하기 위한 기준이 필요했다. 총학과 단과대의 기준을 조금 다르게 설정했다. 총학 데이터베이스 구분기준 - Attribute들이라고 해야 하나. year : 조사 연도 (integer)name : 총학생회 이름(string) c..

성대 학생회 공약 모아보기 사이트 - 멋쟁이사자처럼 프로젝트 (1)

171122 (1) Python 웹 크롤링으로 정보 수집하기 성균관대학교 멋쟁이사자처럼 5기 - 2학기 프로젝트 학교를 몇 년 다니고 있지만, 딱히 관심을 갖고 보지 않으면 대학교 학생회가 어떤 공약을 제시했고, 얼마나 이행했는지 알기가 쉽지 않다. 프로젝트 주제 선정 과정에서 이 문제를 해결해보면 좋겠다는 이야기가 나왔고, 2014년부터 2017년까지, 4년간 총학생회와 단과대 학생회의 공약 정보를 조사하기로 했다. 이 문제를 해결하려면 어떤 과정이 필요할지 대강 그려봤다. 1. 매년 총학생회와 단과대 공약 데이터를 저장해 두는 무언가를 찾는다. 2. 조사한 데이터를 웹페이지에 활용할 수 있는 데이터베이스 형태로 만든다. 3. 데이터베이스를 활용한 웹페이지를 만든다. 이 웹페이지가 만들어지기 위해 가장..

구글 스프레드시트에서 웹 크롤링하기 - importjson 활용법.

웹 스크래핑과 크롤링으로 가장 많이 쓰이는 건 아무래도 Python일 겁니다. 라이브러리도 잘 되어 있고 빠르니까요. 하지만 코드를 한 번도 짜 본적 없는 사람이 웹 스크래핑과 크롤링을 하고 싶어서 파이썬을 배우기 시작하면 꽤 오랜 시간이 필요할 겁니다. 영어 하나 배우는 데에도 오래 걸리는데, 파이썬이라는 컴퓨터 언어는 익숙하지 않으니 더 배우기 어려울 수밖에 없죠. 최근에 구글 스프레드시트로 웹 스크래핑을 하는 법을 알게 됐습니다. 주로 파이썬으로 웹 스크래핑을 하곤 했었는데, 구글 스프레드시트에서도 스크래핑을 편하게 할 수 있도록 누가 자바스크립트 코드를 만들어 뒀더라구요. 저도 인터넷으로 찾아서 해보다 알게 됐는데, 사용 방법을 공유해 두면 좋을 것 같아서 포스팅해 보려고 합니다. 사실 웹 스크래..