전체 글 462

[알고리즘] 백준 2644 파이썬 - 촌수계산

2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 문제 우리 나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌, 나와 아버지 형제들과는 3촌이 된다. 여러 사람들에 대한 부모 자식들 간의 관계가 주..

[알고리즘] 백준 2257 파이썬 - 화학식량

2257번: 화학식량 첫째 줄에 화학식이 주어진다. 화학식은 H, C, O, (, ), 2, 3, 4, 5, 6, 7, 8, 9만으로 이루어진 문자열이며, 그 길이는 100을 넘지 않는다. www.acmicpc.net 문제 우리가 널리 사용하는 H2O(물), CH3COOH(아세트산)과 같은 화학식은 알파벳과 숫자, 그리고 괄호로 구성된다. 먼저 알파벳은 원자를 나타내는 것으로 H는 수소(Hydrogen), C는 탄소(Carbon), O는 산소(Oxygen) 원자를 뜻한다. 또한 원자를 나타내는 알파벳 뒤에 따르는 숫자는 그 원자가 몇 개 포함되어 있는지를 뜻한다. 따라서 COOHHH 분자는 CO2H3로 나타낼 수 있다. 이 문제에서, 숫자는 항상 2 이상 9 이하로만 입력으로 주어진다. 따라서 CO23과..

데이터 분석 - 의사결정 나무 모델 만들기

1. 용어 정리 - 머신러닝 모델 : 함수 만들기와 비슷하다. 하지만 규칙을 컴퓨터가 데이터의 패턴을 찾아 정한다. - 예측 변수 : 예측하는 데 활용하는 변수 또는 모델에 입력하는 값 - 타켓 변수 : 예측하고자 하는 변수 또는 모델이 출력하는 값 - 크로스 밸리데이션 : 데이터를 분할해 일부는 모델을 만들 때 사용하고 일부는 평가할 때 사용하는 방법 - 컨퓨전 매트릭스 : 예측한 값 중 맞은 경우와 틀린 경우의 빈도를 나타낸 값 ​ - 의사결정나무 : 주어진 질문에 두 가지 선택지로 나뉘어 마지막에 결론을 얻는 구조 1단계 : 타켓 변수를 가장 잘 분리하는 예측 변수 선택 2단계 : 첫 번째 질문의 답변에 따라 데이터를 두 노드로 분할 3단계 : 노드에서 타켓 변수를 가장 잘 분리하는 예측 변수 선택..

[알고리즘] 백준 2910 파이썬 - 빈도 정렬

2910번: 빈도 정렬 첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다. www.acmicpc.net 문제 위대한 해커 창영이는 모든 암호를 깨는 방법을 발견했다. 그 방법은 빈도를 조사하는 것이다. 창영이는 말할 수 없는 방법을 이용해서 현우가 강산이에게 보내는 메시지를 획득했다. 이 메시지는 숫자 N개로 이루어진 수열이고, 숫자는 모두 C보다 작거나 같다. 창영이는 이 숫자를 자주 등장하는 빈도순대로 정렬하려고 한다. 만약, 수열의 두 수 X와 Y가 있을 때, X가 Y보다 수열에서 많이 등장하는 경우에는 X가 Y보다 앞에 있어야 한다. 만약, 등장하는 횟수가 같다면, 먼저 나온 것이 앞에 있어야 한다..

데이터 분석 - 통계 분석 기법을 이용한 가설 검정

1. 용어 정리 - 기술 통계 : 데이터를 요약해 설명하는 통계 분석 기법 - 추론 통계 : 단순히 숫자를 요약하는 것을 넘어 어떤 값이 발생할 확률을 계산하는 분석 기법 ​ - 통계적 가설 검정 : 유의확률을 이용해 가설을 검정하는 방법 - 유의확률 : 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률 2. t검정 - 통계적 가설 검정 소스 코드 import pandas as pd mp = pd.read_csv('mp.csv') #각 집단의 데이터 준비 compact=mp.query('category=="compact"')['cty'] suv=mp.query('category=="suv"')['cty'] from scipy import stats #집단 간 분산이 같다고 가정 s..

[알고리즘] 백준 5397 파이썬 - 키로거

5397번: 키로거 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입 www.acmicpc.net 문제 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 강산이는 키보드로 ..

실전 데이터 분석 - 데이터 수집부터 시각화까지(with 후쿠오카)

1. 시작에 앞서 요즘 데이터 분석 공부한 것을 활용도 하고, 2월 달에 갈 예정(?)인 후쿠오카에 대해 조사해보고 싶어 아침부터 열심히 코드를 작성했다. ​ 전체적인 틀은 약 340개의 후쿠오카 관련 포스팅의 내용 중에 많이 작성된 명사는 무엇인지 시각화하는 것이다. ​ 진행 단계 : 1. 웹 크롤링을 활용한 데이터 수집 2. 데이터 전처리 및 텍스트 마이닝 3. 데이터 시각화 2. import from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from bs4 import BeautifulSoup import csv import pandas as pd import konlpy from wor..

데이터 분석 - 인터랙티브 그래프(with plotly.express)

1. 인터랙티브 그래프 마우스 움직임에 반응하며 실시간으로 변하는 그래프를 말한다. fig = px.line(df, x='Date', y='Close', title='{}의 종가(Close) '.format(company)) fig.update_xaxes( rangeslider_visible=True, rangeselector=dict( buttons=list([ dict(count=1, label="1m", step="month", stepmode="backward"), dict(count=3, label="3m", step="month", stepmode="backward"), dict(count=6, label="6m", step="month", stepmode="backward"), dict(st..

[알고리즘] 백준 1991 파이썬 - 트리 순회

1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. 예를 들어 위와 같은 이진 트리가 입력되면, 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식) 중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식) 후위 순회한 결과 : DBEGFCA /..

데이터 분석 - 지도 시각화(with folium)

1. 단계 구분도 지역별 통계치를 색의 차이로 표현한 지도 2. 시군구별 인구 단계 구분도 소스 코드 import json #지도 데이터 map = json.load(open('SIG.geojson', encoding='UTF-8')) import pandas as pd #통계 데이터 df=pd.read_csv('Population_SIG.csv') #문자형태로 변환 df['code']=df['code'].astype(str) #지역을 6개의 구간으로 나눔 bins=list(df["pop"].quantile([0,0.2,0.4,0.6,0.8,1])) import folium #배경 지도 map_sig = folium.Map(location=[35.95, 127.7], #지도 중심 좌표 zoom_start..