그리디 그리디는 현재 순간에서 최고의 선택을 하는 알고리즘 1789 수들의 합 s = int(input()) hap = 0 ans = 0 while s >= hap: ans += 1 hap += ans if s < hap: break print(ans - 1) 1449 수리공 항승 n, l = map(int, input().split()) leak = list(map(int, input().split())) leak.sort() start = leak[0] cnt = 1 for x in leak[1:]: if x in range(start, start + l): continue else: start = x cnt += 1 print(cnt) 11501 주식 t = int(input()) for _ in ..
다이나믹 프로그래밍 효율적인 알고리즘을 위해 사용할 수 있는 기법. top-down(메모이제이션, 하향식) / bottom-up(상향식) 방식이 있다. 간단하게 설명하면 문제를 작은 문제부터 해결하여 큰 문제의 답을 도출하는 방식. 백준 17202 핸드폰 번호 궁합 a = list(input()) b = list(input()) data = [] for i in range(len(a)): data.append(a[i]) data.append(b[i]) dp = [0 for _ in range(15)] for i in range(len(data)-1): dp[i] = (int(data[i]) + int(data[i+1])) % 10 for i in range(14, 1, -1): for j in range..
Connection / Add 다르게 해서 모델 설계하기 약간 multi-task learning이랑 비슷해보여서 헷갈렸는데, Iris 데이터를 보면 sepal length / sepal width / petal length / petal width가 있다. length는 length 끼리 묶고, width는 width끼리 묶어서 모델에게 넣어주고 마지막에 모델을 붙여보자. 데이터 불러오기 import numpy as np import pandas as pd import tensorflow as tf from tensorflow import keras from sklearn.datasets import load_iris iris = load_iris() x = iris.data y = iris.targe..
CIFAR 이번엔 CIFAR - 10 데이터 써보자 flatten() 평탄화 - 말 그대로 쫙 펴주는거다. 어제 reshape로 했던 것을 그냥 코드 내부에서 flatten()으로 자동으로 처리해줄 수 있다. model.add(keras.layers.Flatten()) 그냥 얘만 추가해주면 나머지는 똑같다. 데이터 불러오기 import numpy as np import pandas as pd import matplotlib.pyplot as plt import random as rd from sklearn.metrics import accuracy_score import tensorflow as tf from tensorflow import keras 라이브러리 불러오고, (train_x, train_y..
이진 탐색 데이터 탐색 시 매우 빠른 속도를 자랑하는 알고리즘이다. 이진 탐색을 보기 이전에 순차 탐색부터 알아보자. 순차 탐색 순차 탐색은 말 그대로 특정 데이터를 찾기 위해 앞에서부터 하나씩 확인하는 방법이다. 시간만 충분하다면 상관없지만, 코딩 테스트 같은 경우 순차 탐색을 사용할 시 시간 초과가 발생하기 쉽다. def sequential_search(n, target, arr): for i in range(n): if arr[i] == target: return i + 1# 현재의 위치 순차 탐색 이진 탐색은 반으로 쪼개면서 탐색하는 방법이라 생각하면 된다. 이미 정렬되어 있는 데이터에 사용 가능하며, 매우 빠르게 탐색을 할 수 있다. 위치를 나타내는 변수(포인터)가 3개가 필요한데, 시작점, 끝..
정렬 데이터를 특정 기준에 따라 순서대로 나열하는 것 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬이 있다. 선택 정렬 가장 기본적인 정렬 알고리즘으로 가장 작은 것을 왼쪽으로 계속 보내는 (오름차순의 경우) 정렬 방식 arr = [7, 3, 5, 9, 6, 2] for i in range(len(arr)): min_idx = i for j in range(i+1, len(arr)): if arr[min_idx] > array[j]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] 시간 복잡도가 $ O(N^2) $ 이기 때문에 원소의 개수가 많으면 효율적이지 못한 알고리즘이다... 삽입 정렬 특정한 데이터를 적절한 위치에 삽입한다는 의미의 삽입 정렬이다..
프레임워크 선택 - Tensorflow(Keras) 보통 Tensorflow, Pytorch 둘 중 하나 쓰는데 나는 파이토치가 익숙하지만, 수업에서는 tensorflow의 keras를 써서 더 잘 됐다는 생각이 들었다. tensorflow도 연습을 할 수 있어서 일석이조다. Linear Regression / Logistic Regression import tensorflow as tf from tensorflow import keras import numpy as np 기본 라이브러리 불러오기 - colab을 사용하면 별도의 설치 필요 없이 코드로 불러와 사용할 수 있다. x = np.array(range(30)) y = x * 2 - 10 print(x) print(y) x값을 토대로 y를 예측하는..
선행 개념 스택, 큐, 재귀 개념을 먼저 공부하고 들어가자. Stack 스택은 박스 쌓기로 생각하면 편하다. 나중에 쌓인 것이 가장 먼저 들릴 수 있는 것처럼, 이러한 구조를 LIFO(Last In First Out)라 한다. 파이썬에서는 리스트로 스택을 구현할 수 있다. stack = [] stack.append(1)# [1] stack.append(2)# [1, 2] stack.append(3)# [1, 2, 3] stack.pop()# [1, 2] stack.append(4)# [1, 2, 4] pop() 메소드는 가장 뒤의 데이터를 제거하고, append는 가장 뒤에 데이터를 삽입한다. 백준 10828 스택 import sys n = int(input()) stack = [] cmd = [sys...
머신러닝 머신러닝, 딥러닝 등 많이 들어봤을테지만, 머신러닝이 좀 더 큰 개념이라 생각하면 된다. 학습 방법에 따른 분류 / 과제(문제)에 따른 분류로 나눌 수 있다. 학습 방법에 따라 지도 학습 학습 대상 데이터에 정답을 라벨링하여 학습시키는 것. 비지도 학습 정답이 없는 데이터만으로 학습시키는 것. 강화 학습 선택 결과에 따라 보상을 받는 쪽으로 행동을 개선하게 하면서 학습시키는 것. 과제에 따라 분류 문제(Classification) - 지도학습 Train set - 이미 분류된 데이터로 학습을 통해 규칙을 찾고, Val set / Test set으로 새롭게 주어진 데이터를 분류 회귀 문제(Regression) - 지도학습 Train set - 결과값이 있는 데이터로 학습을 통해 입력 값 / 결과 ..
산점도 두 숫자형 변수의 관계를 나타내는 그래프 # 직선이 중요 -> 무슨 의미일까? 차차 알아가보자. 환경 준비 라이브러리를 먼저 불러오자. import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns 이번에는 뉴욕 공기 오염도 데이터셋을 사용해보자. air = pd.read_csv('https://raw.githubusercontent.com/DA4BAM/dataset/master/air2.csv') air['Date'] = pd.to_datetime(air['Date']) 산점도 플롯 plt.scatter('Temp', 'Ozone', data = air) #plt.scatter(air['Tem..