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

프로그래밍 211

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

Aibril 소프트웨어로 아주 쉽게 챗봇 만들어보기 - T아카데미 세미나

17.09.27 T아카데미 캠퍼스특강 ‘Aibril을 활용한 챗봇 개발’ 본 강의의 영상본은 아래 주소에서 확인할 수 있다. https://tacademy.sktechx.com/live/player/listOnline.action 강연을 해주신 연사님은 SK C&C에서 Aibril Evangelist라는 직함으로 일하시는 류승균 선임이셨다. Evangelist의 사전적 정의는 ‘전도사’인데, Aibril 생태계와 환경을 조성하기 위해 사람들에게 Aibril이라는 소프트웨어를 알리고 가르치는 역할이라고 한다. Aibril은 SK에서 개발한, IBM Watson에 기반한 AI플랫폼을 말한다. AI +Brilliant의 줄임말인 Aibril은 IBM 왓슨의 api를 기반으로 지도학습에 강점을 가지고 있다. 개..

Rails로 카카오톡 대화 분석 결과를 보여주는 웹페이지 만들기

170903. (1)의 글로 카카오톡 텍스트를 R로 분석하는 작업을 거쳤고, 남은 과제는 Ruby on Rails를 활용해 웹페이지를 만드는 것이었다. 구상한 웹페이지의 기본 형식은 사용자에게서 카카오톡 텍스트데이터를 받는다 받은 텍스트데이터를 Ruby on rails로 분석한다 R에서 분석한 결과값을 웹페이지에서 볼 수 있게 출력한다. 이렇게 세 가지였다. 그런데 R과 Rails를 동시에 쓰려니 생기는 문제점은, Rails에서 R 언어를 활용할 수 있는 방법이 마땅치 않다. Python은 라이브러리가 워낙 많기 때문에 자체적으로 KoNLPy로 형태소 분석과 시각화가 가능하지만, Ruby는 해당 기능을 지원하지 않기 때문이다. 그래서 멋쟁이사자처럼에서 Rails 활용을 위해 쓰고 있는 c9에서 해결의 실..