2개의 리스트를 반복문에 같이 돌려?야 할 때 보통 아래와 같은 방법을 사용하곤 했다. 하나의 리스트를 기준으로 반복문을 돌고 다른 하나의 리스트는 인덱스를 사용하는 방법이다. list1=[1,2,3,4,5] list2=[6,7,8,9,10] for i,v in enumerate(list1): print(v,list2[i])1 6 2 7 3 8 4 9 5 10 하지만 zip을 사용하면 좀 더 깔끔하게 다수의 리스트에 대해 동시에 반복문을 돌릴 수 있다. list1=[1,2,3,4,5] list2=[6,7,8,9,10] for v1,v2 in zip(list1,list2): print(v1,v2) 1 6 2 7 3 8 4 9 5 10 이러한 방식을 알았다면 아래와 같은 응용도 가능하다. [1,2,3,4,5..
리스트 ["a","b","a","c","d","e","c","c"]가 있다고 해보자. 각 요소별 갯수를 구해야 할 때, 아래와 같이 딕셔너리에는 키 값이 하나만 존재한다는 특징을 사용해 구할 수 있을 것이다. dict={} test=["a","b","a","c","d","e","c","c"] for v in test: if dict.get(v): dict[v]+=1 else: dict[v]=1 print(dict) {'a': 3, 'b': 2, 'c': 4, 'd': 2, 'e': 2} 위와 같은 방식으로도 구할 수는 있지만 collections 모듈의 Count를 사용하면 손쉽게 구할 수 있다. import collections dict={} test=["a","b","a","c","d","e","c"..
아래와 같은 데이터가 있을 때 특정 열 값을 얻은 후 타입을 리스트로 변경하는 방법을 알아보자. csv 파일 읽기 pandas 모듈을 사용할 것이기 때문에 먼저 pandas를 임포트해준 후 read_csv를 사용해 csv 파일을 읽어준다. read_csv를 사용해 읽는데 names=[]를 사용해 각 열의 이름을 지정해주고 한글 데이터의 경우 그냥 읽으면 깨지기 때문에 encoding='CP949'로 인코딩을 설정해준다. import pandas as pd csv = pd.read_csv('test.csv',\ names=['gu','dong','name','category','microReview','commonAddr','addr'], \ encoding='CP949') 특정 열 값을 리스트로 변경하기..
많은 양의 데이터를 저장하고 있는 csv에서, 특정 값을 행만 선별해 찾고 싶을 때가 있다. 이럴 때, 파이썬 pandas 모듈을 사용하면 특정 값을 가진 행을 손쉽게 얻을 수 있다. 참고로, 파이썬 pasndas는 'pip install pandas'로 쉽게 할 수 있다. 데이터 및 찾을 행 선정 naver_place.csv는 네이버 플레이스의 서울시 음식점 정보가 저장되어 있는 csv이다. 해당 csv 파일에서 구와 동이 '동대문구 회기동'인 행을 찾아보자. cvs 파일 읽기 (read_csv) 특정 값을 가진 행을 찾기 위해 먼저 read_csv를 사용해 csv 파일을 읽어들인다. 각 열(columns)의 이름은 names=[]로 지정해줄 수 있고, 한글 데이터인 경우 인코딩 없이 그냥 읽으면 깨질..
+) 제가 크롤링에 사용한 URL 서비스 자체(store.naver.com)가 중단되고 새롭게 개편된 것으로 확인됩니다. 따라서 아래 코드에 사용된 URL로는 현재 크롤링이 불가하니 JSON 응답값을 주는 사이트의 크롤링 코드 작성 방법, 방식 위주로만 확인 부탁드립니다! 저번 포스팅에서 서울시의 구/동 별로 카테고리를 나누어 크롤링하기 위해 서울시 행정구역 정보를 저장했고, 크롤링 URL을 구성하기 위한 작업을 선행했다. 그리고 해당 URL 요청을 통해 응답을 받았고 응답 코드 500이 나오는 경우에 대한 처리까지 마쳤다. 이번 포스팅에서는 저번 내용에 이어서, 응답으로 받은 값을 파이썬 json 모듈을 사용해 파싱하고 저장하는 코드를 작성해보자. 이전 포스팅에서 내용과 코드가 모두 이어지므로 필요한 ..
+) +) 제가 크롤링에 사용한 URL 서비스 자체(store.naver.com)가 중단되고 새롭게 개편된 것으로 확인됩니다. 따라서 아래 코드에 사용된 URL로는 현재 크롤링이 불가하니 JSON 응답값을 주는 사이트의 크롤링 코드 작성 방법, 방식 위주로만 확인 부탁드립니다! 빅데이터 관련 수업을 들은 적이 있는데 뭔가 데이터 처리를 하기 전에 일단 데이터를 크롤링해와야 했던 과제가 있었다. 네이버 플레이스에서 맛집을 크롤링해보기로 해서 약 12만 건? 정도 크롤링했었다. 이번 포스팅에서는 네이버 플레이스에서 서울시 맛집을 구/동별로 크롤링하는 코드를 소개해보려 한다. 서울시 구/동 정보, 파일에 저장해놓기 서울시의 구/동 정보를 먼저 탐색하는 이유는 두가지이다. 첫 번째는 크롤링할 때, URL 매개변..
프로그래머스 완전탐색 - 소수찾기, 문제 확인 숫자 조합에 관한 모든 케이스를 구한 후, 그 중 소수가 몇개인지 찾는 문제이다. numbers는 길이 1 이상 7 이하인 문자열 numbers는 0~9까지 숫자만으로 이루어져 있음 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지, 개수를 리턴 프로그래머스 완전탐색 - 소수찾기, 문제 풀이 (파이썬) 모든 수의 조합을 찾는 것은 itertools의 permutations를 임포트하여 구하였다. "17"의 경우 길이가 1인 경우의 조합과 2인 경우의 조합을 전부 구해야 하기 때문에 1부터 numbers 길이까지 반복문을 돌면서 모든 조합을 구해 num_case에 추가해주었다. 그리고 nu..
프로그래머스 완전탐색 - 모의고사, 문제 확인 정렬 문제를 끝내고 이제 완전탐색 문제이다. 아래와 같이 답을 찍는 1,2,3번의 수포자가 있을 때 누가 제일 답을 많이 맞췄는지 리스트로 리턴하면 된다. 만약 답을 맞춘 수가 5,5,5 라면 [1,2,3]을 리턴하면 된다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 프로그래머스 완전탐색 - 모의고사, 문제 풀이 (파이썬) 문제 수가 최대 10000개라고 해..
힙(Heap) - 라면공장, 문제확인 개인적으로 우선순위 큐를 어떻게 활용해야 하는지 전혀 감이 잡히지 않아 헤맸던 문제이다. 일단, 문제 설명은 아래와 같다. 라면 공장은 하루에 밀가루 1톤 사용 k일 이후에 밀가루 공급 가능, 해외 공장에서 수입해야 함 해외 공장에서는 밀가루 공급이 가능한 날짜와 수량을 알려줌 라면 공장에서는 운송비를 줄이기 위해 최소한의 횟수로 밀가루를 공급받고자 함 현재 공장에 남아있는 밀가루 수량 : stock 밀가루 공급 일정 :dates (dates[i] " i번째 공급 가능일) 해당 시점에 공급 가능한 밀가루 수량 : supplies (supplies[i] : dates[i] 날짜에 공급 가능한 밀가루 수량) 원래 공장으로부터 공급받을 수 있는 시점 : k 밀가루가 떨어지..
힙(Heap) 자료구조에 대해 자료구조에서 힙(Heap)은 최대힙과 최소힙이 있는데 최대힙의 경우 모든 부모 노드의 값이 자식 노드의 값보다 크거나 같은 값을 갖는 이진 트리를 말한다. 이런 힙을 배열을 통해 표현하게 되는데 힙 배열에서의 부모 노드와 자식 노드의 관계는 부모의 인덱스를 x라고 했을 때, 왼쪽 자식의 인덱스는 x*2, 오른쪽 자식의 인덱스는 (x*2)+1이 된다. 그리고 이러한 힙의 특징을 사용하면 우선순위 큐를 구현할 수 있게 되는데, 스택이 제일 마지막에 들어온 값을 먼저 꺼내는 자료구조고 큐가 제일 먼저 들어온 값을 꺼내는 자료구조라면 우선순위 큐는 가장 우선순위가 높은 값이 먼저 꺼내지는 자료구조이다. 즉, 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 자료구조라고 ..
프로그래머스 스택/큐 마지막 문제인 주식가격문제를 풀어보도록 한다. 스택/큐 - 주식가격, 문제확인 문제 설명은 아래와 같다. 초 단위로 기록된 주식가격이 담긴 배열 prices가 변수로 주어짐 가격이 떨어지지 않은 기간이 몇초인지를 리턴 요번 문제 설명은 심플한 편이다. 예를 들어 [1,2,3,2,3] prices 배열이 주어졌을 때, 리턴값이 [4,3,1,1,0]이 되는 과정은 아래와 같다. 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다. 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다. 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다. 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다. 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았..
스택/큐 - 쇠막대기, 문제 확인 처음보는 신기한 유형의 문제이다. 문제 설명은 아래와 같다. 쇠막대기를 아래에서 위로 겹쳐놓고 레이저를 위에서 수직으로 발사해 쇠막대기를 자르려 함 짧은 쇠막대기가 긴 쇠막대기 위에 오도록 배치 각 쇠막대기를 자르는 레이저는 적어도 하나 존재 레이저는 어떤 쇠막대기의 양끝점과도 겹치지 않음 레이저는 ()로 표현함 쇠막대기의 왼쪽 끝은 (로, 오른쪽 끝은 )로 표현 쇠막대기, 레이저의 배치를 표현한 문자열 arrangement가 주어질 때, 잘린 쇠막대기 조각의 총 개수를 return 스택/큐 - 쇠막대기, 문제 풀이 먼저 레이저 ()를 전부 *값으로 변경해주었다. def solution(arrangement): answer = 0 arrangement = arrangem..