본문 바로가기

코드잇

(25)
[코드잇] 분할 정복 분할정복은 어떤 문제를 나눌 수 없을 때까지 나누어서 각각을 풀어서 다시 합병하여 문제의 답을 얻는 알고리즘 재귀는 단순히 함수가 자신을 참조하는 것 합병 정렬 : 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음, 두 개의 정렬된 부분 리스트를 합하여 전체가 정렬된 리스트가 되게 하는 방법 > 분할, 정복, 결합 의 반복 다시 합병하여 문제의 답을 얻는 알고리즘 def merge(list1, list2): i = 0 j = 0 # 정렬된 항목들을 담을 리스트 merged_list = [] # list1과 list2를 돌면서 merged_list에 항목 정렬 while i list2[j]:..
[코드잇] 알고리즘 연습2 Brute Force 강남역에 엄청난 폭우가 쏟아진다고 가정합시다. 정말 재난 영화에서나 나올 법한 양의 비가 내려서, 고층 건물이 비에 잠길 정도입니다. 그렇게 되었을 때, 건물과 건물 사이에 얼마큼의 빗물이 담길 수 있는지 알고 싶은데요. 그것을 계산해 주는 함수 trapping_rain을 작성해 보려고 합니다. 함수 trapping_rain은 건물 높이 정보를 보관하는 리스트 buildings를 파라미터로 받고, 담기는 빗물의 총량을 리턴해 줍니다. 예를 들어서 파라미터 buildings로 [3, 0, 0, 2, 0, 4]가 들어왔다고 합시다. 그러면 0번 인덱스에 높이 33의 건물이, 3번 인덱스에 높이 22의 건물이, 5번 인덱스에 높이 44의 건물이 있다는 뜻입니다. 1번, 2번, 4번 인덱스..
[코드잇] 알고리즘 연습1 Brute Force 왼쪽 뭉치에서 카드를 하나 뽑고 오른쪽 뭉치에서 카드를 하나 뽑아서, 두 수의 곱이 가장 크게 만들고 싶은데요. 어떻게 하면 가장 큰 곱을 구할 수 있을까요? 함수 max_product는 리스트 left_cards와 리스트 right_cards를 파라미터로 받습니다. left_cards는 왼쪽 카드 뭉치의 숫자들, right_cards는 오른쪽 카드 뭉치 숫자들이 담겨 있고, max_product는 left_cards에서 카드 하나와 right_cards에서 카드 하나를 뽑아서 곱했을 때 그 값이 최대가 되는 값을 리턴합니다. def max_product(left_cards, right_cards): # 코드를 작성하세요. from itertools import product li ..
[코드잇] 알고리즘 - 재귀함수2 이진 탐색 이진 탐색 알고리즘을 이미 반복문으로는 구현해 보셨죠? 이번에는 재귀적으로 문제를 해결해 보세요. 반드시 재귀(recursion)의 개념을 사용하셔야 합니다. 코드 구현이 꽤 어려우니, 천천히 고민해 보시기 바랍니다. 다른 재귀 문제를 풀 때와 마찬가지로 base case와 recursive case를 생각해 내는 것이 핵심입니다! 하노이의 탑 하노이의 탑 게임 아시나요? 이 게임의 목표는 왼쪽 기둥에 있는 원판들을 모두 오른쪽 기둥으로 옮기는 것입니다. 지켜야할 규칙은 두가지입니다: 한 번에 하나의 원판만 옮길 수 있다. 큰 원판이 작은 원판 위에 있어서는 안 된다. (출저: 위키피디아) 하노이의 탑 게임의 해답을 출력해주는 함수 hanoi를 쓰세요. hanoi는 파라미터로 원판 수 num_..
[코드잇] 알고리즘 - 재귀함수 # 재귀함수를 이용하여 코드를 작성 def sum_digits(n): if n >= 1: return n % 10 + sum_digits(n // 10) else: return 0 # 코드잇 답안 def sum_digits(n): # base case if n < 10: return n # recursive case return n % 10 + sum_digits(n // 10) def flip(some_list): # 코드를 입력하세요. if len(some_list)
[코드잇] TV 시청률 최종 프로젝트 티비랭킹닷컴의 데이터를 DataFrame으로 만들어서 분석해보려 합니다. 주어진 결과 예시와 같은 DataFrame을 만들어 보세요. import time import pandas as pd import requests from bs4 import BeautifulSoup # 기간 지정 years = list(range(2010, 2019)) months = list(range(1, 13)) weeks = list(range(0, 5)) # 빈 리스트 생성 rating_pages = [] for year in years: for month in months: for week in weeks: # HTML 코드 받아오기 response = requests.get("https://workey.codeit.k..
[코드잇] TV 시청률 크롤링 3 티비랭킹닷컴 사이트를 다시 크롤링해보려 합니다. 앞선 과제 TV 시청률 크롤링 pt. 2에서는 모든 달에 5주차가 있다고 가정하여 받아왔습니다. 이번에는 파싱을 활용해서 실제로 데이터가 있는 페이지만 받아오려고 하는데요. 2010년 1월부터 2018년 12월까지 모든 달에 대해, 데이터가 있는 모든 페이지의 HTML 코드(response의 text)를 rating_pages에 저장해 보세요. 주의: BeautifulSoup 타입으로 변환한 코드가 아닌, response의 text를 리스트에 저장하세요! 1. 태그 차이 확인 2. 코드 작성 랭킹 정보가 없는 페이지에는 랭킹 테이블에 row줄이 없다. 내가 작성한 코드는 실행은 되는데 시간이 오래 걸린다. # 코드잇 답안 import requests fro..
[코드잇] 검색어 순위 받아오기 음악 사이트의 검색어 순위를 받아오려 합니다. '인기 아티스트' 아래에 있는 '검색어 순위'의 1위~10위 데이터를 파싱해서 리스트에 담아 print 해 보세요. 1. 태그 확인 2. 코드 작성 # 코드잇 답안 import requests from bs4 import BeautifulSoup # HTML 코드 받아오기 response = requests.get("https://workey.codeit.kr/music/index") # BeautifulSoup 타입으로 변환 soup = BeautifulSoup(response.text, 'html.parser') # "rank__order" 클래스에 중첩된 태그 선택 li_tags = soup.select('.rank__order li') # 빈 리스트 ..