분류 전체보기 25

코드업(CodeUp) 3321: 최고의 피자

문제 설명 vega 선생님은 Miss 피자 가게의 단골 손님이다. 그는 이번 달부터 절약 생활을 시작했다. 그래서 그는 피자 가게에서 주문할 수 있는 피자 중 1 달러 당 열량이 최대가 되는 피자를 주문하고 싶어한다. 이러한 피자를 "최고의 피자"라고 부르기로 하자. "최고의 피자"는 1종류가 아니다. Miss 피자는 N 종류의 토핑에서 여러 종류를 자유롭게 선택하여, 도우 위에 올려 주문할 수있다. 같은 토핑을 2 개 이상 올릴 수 없다. 도우에 토핑을 하나도 하지 않은 피자도 주문할 수있다. 도우의 가격은 A 달러이며, 토핑의 가격은 모두 B 달러이다. 실제 피자 가격은 도우의 가격과 토핑 가격의 합계이다. 즉, 토핑을 k 종류 (0 ≦ k ≦ N) 한 피자의 가격은 A + k × B 원이다. 피자 ..

그리디 알고리즘 이론

그리디 알고리즘은 현재 상황에서 지금 당장 좋은 것만 고르는 방법으로, 탐욕법이라고도 한다. 그리디 알고리즘을 이용할 때는 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토해야 한다. 코드업(CodeUp) 3301: 거스름돈 문제설명 어떤 가게의 욕심쟁이 점원은 거스름돈을 나눠줄때 거스름돈의 개수를 적게해서 주고자 한다. 거스름돈을 입력 받아 점원이 줄 수 있는 최소 거스름돈의 개수를 출력하시오. 예를 들어 54520원인 경우, 거스름돈으로 50000원권 1장, 1000원권 4장, 500원 1개, 10원 2개 해서 총 8개이다. (※ 현재 우리나라가 사용하고 있는 화폐를 사용한다. 10원 50원 100원 500원 1,000원 5,000원 10,000원 50,000원) 입..

DataFrame으로 데이터 불러오기

판다스(Pandas)는 데이터 처리, 특히 행과 열로 이뤄진 2차원 데이터를 효율적으로 가공, 처리할 수 있는 기능을 제공하는 라이브러리다. 판다스 모듈 임포트하기 import pandas as pd 캐글(Kaggle)에서 데이터 파일 다운받기 캐글은 머신러닝 경연에 사용되는 많은 예제들을 포함하는 사이트이다. 타이타닉 탑승자 중 생존자 예측하기는 그중에서 가장 대표적인 예제이다. 캐글에 로그인을 한 후에 아래 링크에 들어가서 Download All 버튼을 눌러 타이타닉 탑승자에 대한 데이터를 다운받을 수 있다. https://www.kaggle.com/competitions/titanic/data Titanic - Machine Learning from Disaster | Kaggle www.kaggl..

파이썬 리스트

리스트 컴프리헨션 대괄호 안에 조건문과 반복문을 적용하여 리스트를 생성하는 방법으로, 리스트를 쉽게 초기화할 수 있다. # 리스트 컴프리헨션을 사용하지 않은 경우 lst = [] for i in range(1, 11): lst.append(i) print(lst) # 리스트 컴프리헨션을 사용하는 경우 lst = [i for i in range(1, 11)] print(lst) 실행 결과 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 위 예시와 같이 리스트 컴프리헨션을 사용하면 코드가 간단해지며 실행속도도 빨라진다. 리스트 컴프리헨션을 사용하여 리스트 쉽게 초기화하기 # 0부터 19까지의 수 중에서 홀수만 포함하는 리스트 even_lst ..

알고리즘 성능평가

복잡도 시간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석 공간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석 빅오표기법(Big-O Notation) 수학적 정의는 모든 $ 0 < n_{0} \leq n $에 대하여 $ 0 \leq f(n) \leq k \bullet g(n) $인 양의 상수 $ k $와 $ n_{0} $가 존재하면 $ f(n) = O(g(n)) $이다. 쉽게 말하면 어떤 프로그램을 실행했을 때 연산횟수가 $ 2n^2 + 5n + 1000 $이라고 하면 이 프로그램의 시간복잡도를 계수를 제외한 최고차항만 남겨서 $ O(n^2) $이라고 하는 것이다. 이렇게 표기하는 이유는 $ n $의 값이 무한히 커지면 최고차항을 제외한 항들은 최고차항에 비해 값이..

넘파이(NumPy) - 인덱싱과 행렬에서의 활용

특정한 데이터만 추출하기 원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터가 반환된다. import numpy as np # 1부터 9까지 1차원 ndarray 생성 array1 = np.arange(start=1, stop=10) # index는 0부터 시작하므로 3번째 값의 index는 2 print('세 번째 값:', array1[2]) 실행 결과 세 번째 값: 3 슬라이싱(Slicing) 슬라이싱은 ndarray의 연속된 값들을 추출하는 방식이다. ':' 기호의 양 옆에 시작 인덱스와 종료 인덱스를 표시하면 시작 인덱스부터 종료 인덱스 -1위치에 있는 데이터의 ndarray를 반환한다. # array1의 두 번째 값부터 일곱 번째 값 출력하기 print(array1[1:7]) 실행 결과 [2..

ndarray 생성하기

NumPy는 파이썬에서 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 지원하는 대표적인 패키지이다. 넘파이 모듈 임포트하기 import numpy as pd array(), shape 넘파이의 array()함수는 파이썬의 리스트와 같이 인자를 입력받아 ndarray의 타입으로 변환해준다. 생성된 ndarray 배열의 shape 변수는 ndarray의 크기(행과 열의 수)를 튜플의 형태로 가지고 있다. array1 = np.array([[1, 2, 3],[2, 3, 4]]) print('array1의 type:', type(array1)) print('array1의 크기:', array1.shape) 실행 결과 array1의 type: array1의 크기: (2, 3) arange(), zeros(), ..

Chapter 4-1. 선형변환과 선형변환의 성질

$ V $와 $ W $가 벡터 공간이라고 하자. 함수 $ T : V\to W $는 모든 벡터 $ \textbf{x}, \textbf{y} \in V $와 스칼라 $ k $에 대하여 다음 조건을 만족시키면 $ V $에서 $ W $로의 선형변환(linear transformation) 또는 선형 연산자(linear operator)라고 한다. (1) $ T(\textbf{x} + \textbf{y})=T(\textbf{x})+T(\textbf{y}) $ (2) $ T(k\textbf{x} = kT(\textbf{x}) $ V = W $일 때, $ T $를 $ V $위의 선형변환 또는 선형연산자라고 한다. $ A $가 $ m\times n $행렬일 때 변환 $ T : \mathbb{R}^n \to \mathb..

Chapter 3-2. 기저와 차원

$ V $를 벡터 공간이라고 하면, $ V $의 벡터들로 이루어진 부분집합이 일차독립이고 $ V $를 생성하면 이 벡터들의 집합을 $ V $의 기저(basis)라고 한다. $ \mathbb{R}^n $ 안의 벡터 $ e_{1}=(1, 0, ..., 0), e_{2}=(0, 1, 0, ..., 0), ..., e_{n}=(0, 0, ..., 0) $은 $ \mathbb{R}^n $의 표준기저(standard basis)라고 한다. $ \alpha = $ {$\textbf{v}_{1}, \textbf{v}_{2}, ..., \textbf{v}_{n} $}가 벡터 공간 $ V $의 기저(basis)라고 하자. 그러면 $ V $안에 있는 각각의 벡터 $ \textbf{x} $는 $\textbf{v}_{1}, \..

Chapter 3-1. 부분 공간과 일차 독립

벡터 공간 $ V $의 공집합이 아닌 부분집합 $ W $는 다음 두 조건을 만족하면 부분공간(subspace)이다. (1) $ \textbf{x} + \textbf{y} \in W $ (2) $ k\textbf{x} \in W, k \in \mathbb{R} $ 예제) 다음 주어진 집합이 3차원 공간 $ \mathbb{R}^3 $의 부분공간인지 아닌지 판별하여라. $ W = {(x, y, z)\in \mathbb{R}^3 : xyz=0} $ $ W $의 두 벡터 $ \textbf{a}, \textbf{b} $를 $ \textbf{a}=(x_{1}, y_{1}, z_{1}), \textbf{b}=(x_{2}, y_{2}, z_{2}) $라고 정의하면, $ \textbf{a} + \textbf{b} = x_..