Adventure Time - Finn 3
본문 바로가기

전체 글369

TypeScript 유틸리티 타입(Utility Types) 기존 타입을 변환하고 조합하는 내장 유틸리티 타입들을 정리합니다.기본 인터페이스아래 예시들은 모두 이 User 인터페이스를 기반으로 합니다.interface User { id: number; name: string; age: number; gender?: "m" | "f";}1. keyof객체 타입의 모든 키를 유니온 타입으로 추출합니다.type UserKey = keyof User; // "id" | "name" | "age" | "gender"const uk: UserKey = "age"; // ✅ OKconst uk2: UserKey = "email"; // ❌ Error — User에 없는 키💡 keyof는 유틸리티 타입은 아니지만, Record나 Pick 등과 함께 자주 쓰이.. 2026. 4. 11.
TypeScript 제네릭(Generic) 타입을 미리 고정하지 않고, 사용하는 시점에 결정하는 제네릭의 기본부터 제약 조건까지 정리합니다.1. 제네릭이 필요한 이유동일한 함수를 다양한 타입의 배열에 사용하고 싶다고 가정해봅시다.// number 배열, string 배열 모두 길이를 구하고 싶다면?// → 함수 오버로드? 유니온 타입?// → 타입이 계속 늘어나면 그때마다 추가해야 한다오버로드나 유니온으로도 해결할 수 있지만, 타입이 늘어날 때마다 코드를 수정해야 합니다. 제네릭을 사용하면 선언 시에는 타입을 비워두고, 호출 시에 타입을 결정할 수 있습니다.2. 제네릭 함수를 타입 파라미터라고 합니다. 함수를 호출할 때 전달하는 타입에 따라 T가 결정됩니다.function getSize(arr: T[]): number { return arr.l.. 2026. 4. 11.
TypeScript 클래스(Class) JavaScript 클래스와의 차이점부터 접근 제한자, static, 추상 클래스까지 단계별로 정리합니다.1. JS 클래스와 TS 클래스의 차이JavaScript에서는 constructor에서 바로 this.color를 할당해도 문제가 없습니다. 하지만 TypeScript에서는 멤버 변수를 먼저 선언해야 합니다.// ❌ TypeScript에서는 에러class Car { constructor(color) { this.color = color; // color가 선언되지 않음 }}// ✅ 멤버 변수를 먼저 선언class Car1 { color: string; constructor(color: string) { this.color = color; } start() { console.. 2026. 4. 11.
TypeScript 리터럴 · 유니온 · 교차 타입 정리 타입을 더 정밀하게 제어하는 세 가지 핵심 기법을 정리합니다.1. 리터럴 타입 (Literal Types)변수에 들어올 수 있는 값을 특정 값으로 한정하는 타입입니다.const vs let의 타입 추론 차이const userName1 = "Bob"; // 타입: "Bob" (리터럴 타입)let userName2 = "Tom"; // 타입: stringconst는 값이 변하지 않으므로 TypeScript가 "Bob"이라는 리터럴 타입으로 추론합니다. 반면 let은 값이 바뀔 수 있어 넓은 string 타입으로 추론됩니다.문자열 리터럴 타입 활용type 별칭과 함께 사용하면 허용 가능한 값을 명확히 제한할 수 있습니다.type Job = "police" | "developer" | "teacher";.. 2026. 4. 11.
TypeScript 함수 타입 함수의 매개변수와 반환값에 타입을 지정하는 기본기부터, 오버로드까지 단계별로 정리합니다.1. 함수의 반환 타입 지정함수 선언 시 괄호 뒤에 반환 타입을 명시합니다. 명시한 타입과 실제 반환값이 다르면 컴파일 에러가 발생합니다.// number를 반환function add1(num1: number, num2: number): number { return num1 + num2;}// 반환값이 없는 함수function add2(num1: number, num2: number): void { console.log(num1 + num2);}// boolean을 반환function isAdult(age: number): boolean { return age > 19;}⚠️ 반환 타입을 number로 지정해놓고.. 2026. 4. 11.
TypeScript 인터페이스(Interface) 객체의 타입을 정의하는 핵심 도구, 인터페이스의 기본부터 확장까지 단계별로 정리합니다.1. 왜 interface가 필요한가?object 타입으로 변수를 선언하면 프로퍼티에 접근할 수 없습니다.let user: object;user = { name: 'xx', age: 30}console.log(user.name); // ❌ Error — object 타입에는 name이 없음이 문제를 해결하기 위해 interface로 객체의 구조를 명확히 정의합니다.interface User { name: string; age: number;}let user: User = { name: 'xx', age: 30}user.age = 10; // ✅ 정상 동작console.log(user.age).. 2026. 4. 11.
TypeScript 기초 타입 정리 변수 선언부터 enum까지, 타입스크립트의 핵심 타입 시스템을 정리합니다.1. 기본 타입 — string, number, booleanTypeScript의 가장 기본이 되는 세 가지 원시 타입입니다. 변수 선언 시 콜론(:) 뒤에 타입을 명시합니다.let car: string = 'bmw';let age: number = 30;let isAdult: boolean = true;타입을 명시하면 해당 변수에 다른 타입의 값을 할당할 때 컴파일 단계에서 에러를 잡아줍니다. 런타임 에러를 사전에 방지할 수 있는 핵심 장점입니다.2. 배열 타입배열은 두 가지 문법으로 선언할 수 있습니다. 기능은 완전히 동일하며, 팀 컨벤션에 따라 선택하면 됩니다.// 방법 1: 타입[]let a: number[] = [1, 2,.. 2026. 4. 11.
타입스크립트를 사용하는 이유 function add(num1,num2) { console.log(num1,num2);}add();add(1);add(1,2);add(3,4,5);add('hello','world');// NaN// NaN// 3// 7// "helloworld"아무런 피드백이 없다 아무런 경고도 주지 않았고 실수가 분명한 코드임에도 문제 없이 실행되었다 function showItems(arr){ arr.forEach((item)=> { console.log(item); });}showItems([1,2,3]);showItems(1,2,3); //실행 시점 에러 발생배열이 아니면 레퍼런스 에러 발생 javascript (동적언어) : 런타임에 타입 결정 / 오류 발견자바스크립트는 실행되는 시점 런타임에 .. 2026. 4. 11.
pandas - DataFrame column 선택하기 기본적으로 [ ]는 column을 추출컬럼 인덱스일 경우 인덱스의 리스트 사용 가능리스트를 전달할 경우 결과는 Dataframe하나의 컬럼명을 전달할 경우 결과는 Seriesdf = load_titanic() 하나의 컬럼 선택df['Survived'] # Series 복수의 컬럼 선택하기df[['Survived', 'Age', 'Name', 'Survived']] 2026. 4. 11.
점수계산 OX 문제는 맞거나 틀린 두 경우의 답을 가지는 문제를 말한다. 여러 개의 OX 문제로 만들어진 시험에서 연속적으로 답을 맞히는 경우에는 가산점을 주기 위해서 다음과 같이 점수 계산을 하기 로 하였다. 1번 문제가 맞는 경우에는 1점으로 계산한다. 앞의 문제에 대해서는 답을 틀리다가 답이 맞는 처음 문제는 1점으로 계산한다. 또한, 연속으로 문제의 답이 맞는 경우에서 두 번째 문제는 2점, 세 번째 문제는 3점, ..., K번째 문제는 K점으로 계산한다. 틀린 문제는 0점으로 계 산한다. 예를 들어, 아래와 같이 10 개의 OX 문제에서 답이 맞은 문제의 경우에는 1로 표시하고, 틀린 경 우에는 0으로 표시하였을 때, 점수 계산은 아래 표와 같이 계산되어, 총 점수는 1+1+2+3+1+2=10 점이다. .. 2026. 4. 11.
주사위 게임 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게 임이 있다. 규칙(1) 같은 눈이 3개가 나오면 10,000원+(같은 눈)*1,000원의 상금을 받게 된다. 규칙(2) 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)*100원의 상금을 받게 된다. 규칙(3) 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)*100원의 상금을 받게 된다. 예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3*100으로 계산되어 1,300원을 받게 된 다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2*1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6*100으로 .. 2026. 4. 11.
뒤집은 소수 N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력 한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다. 뒤집는 함수인 def reverse(x) 와 소수인지를 확인하는 함수 def isPrime(x)를 반드시 작성하 여 프로그래밍 한다 import sys# sys.stdin=open("input.txt","rt")# n,m = map(int,input().split())n = int(input())arr = list(map(int,input().split()))def reverse(x): re = 0 while x >.. 2026. 4. 11.
pandas - DataFrame DataFrameSeries가 1차원이라면 DataFrame은 2차원으로 확대된 버전Excel spreadsheet 라고 생각2차원이기 때문에 인덱스가 row,column로 구성됨row는 각 개별 데이터를, column은 객별 속성을 의미Data Analysis, Machine Learning에서 data 변형을 위해 가장 많이 사용 read_csv()filepath = os.path.join(base_path, 'titanic.csv')# pd.read_csv() CSV 파일로부터 -> DataFrame 객체로 읽어오기df = pd.read_csv(filepath)# 함수로 만들어 놓기df = Nonedef load_titanic(): return pd.read_csv(filepath) head(),.. 2026. 4. 10.
소수(에라토스테네스 체) 자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요. 만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다. 제한시간은 1초입니다. import sys# sys.stdin=open("input.txt","rt")# n,m = map(int,input().split())n = int(input())# a = list(map(int,input().split()))cnt = 0arr = [0 for _ in range(n+1)]for i in range(2,n+1): if arr[i] == 0: cnt +=1 for j in range(i,n+1,i): arr[j] = 1.. 2026. 4. 10.
pandas - Series pandas : 데이터 분석 라이브러리행, 열 형태의 정형 데이터 객체를 다룸2차원 데이터엑셀 시트, RDB 의 테이블과 같은 형태 Seriespandas의 기본 객체중 하나numpy의 ndarray를 기반으로 인덱싱 기능이 추가된 1차원 배열을 나타냄(index * value의 형태)index를 지정하지 않을 시 기본적으로 ndarray와 같이 0-based인덱스 생성, 지정할 경우 명시적으로 지정된 index 사용 import pandas as pd Series 생성s1 =pd.Series([10,20,30]) 00 101 202 30# 왼쪽이 index, 오른쪽이 value(값), dtype : 데이터 타입# 데이터로만 생성하게 되면, index는 0-base 인덱스로 생성됨 .values / ... 2026. 4. 9.
자릿수의 합 N개의 자연수가 입력되면 각 자연수의 자릿수의 합을 구하고, 그 합이 최대인 자연수를 출력 하는 프로그램을 작성하세요. 각 자연수의 자릿수의 합을 구하는 함수를 def digit_sum(x)를 꼭 작성해서 프로그래밍 하세요. import syssys.stdin=open("input.txt","rt")# n,m = map(int,input().split())n = int(input())a = list(map(int,input().split()))def digit_sum(x): sum = 0 while x > 0: sum+=x%10 x= x//10 return summaxSum = -2174000000for x in a: tmp = digit_sum(x) .. 2026. 4. 9.
정다면체 두 개의 정 N면체와 정 M면체의 두 개의 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확 률이 높은 숫자를 출력하는 프로그램을 작성하세요. 정답이 여러 개일 경우 오름차순으로 출력합니다. import sys# sys.stdin=open("input.txt","rt")n,m = map(int,input().split())# n = int(input())# a = list(map(int,input().split()))max = -2147000000res = [0 for _ in range(n+m)]for i in range(1, n+1): for j in range(1, m+1): res[i+j-1] += 1# max = max(res)for i in range(n+m): if .. 2026. 4. 9.
대표값 N명의 학생의 수학점수가 주어집니다. N명의 학생들의 평균(소수 첫째자리 반올림)을 구하고, N명의 학생 중 평균에 가장 가까운 학생은 몇 번째 학생인지 출력하는 프로그램을 작성하세 요. 평균과 가장 가까운 점수가 여러 개일 경우 먼저 점수가 높은 학생의 번호를 답으로 하고, 높 은 점수를 가진 학생이 여러 명일 경우 그 중 학생번호가 빠른 학생의 번호를 답으로 합니다. import sys# sys.stdin=open("input.txt","rt")# n,k = map(int,input().split())n = int(input())a = list(map(int,input().split()))avg = round(sum(a)/n)min =2147000000for idx, x in enumerate(a):.. 2026. 4. 9.
K번째 큰 수 현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려 고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력 하는 프로그램을 작성하세요. 만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다 import syssys.stdin=open("input.txt","rt")n,k = map(int,input().split())a = sorted(list(map(int,input().split())),reverse=True)arr = set()for i in range.. 2026. 4. 9.
K번째 수 N개의 숫자로 이루어진 숫자열이 주어지면 해당 숫자열중에서 s번째부터 e번째 까지의 수를 오름 차순 정렬했을 때 k번째로 나타나는 숫자를 출력하는 프로그램을 작성하세요. import sys# sys.stdin=open("input.txt","rt")T = int(input())for t in range(T): n,s,e,k = map(int,input().split()) M = list(map(int,input().split())) f = sorted([M[m] for m in range(s-1,e)]) print(f"#{t+1} {f[k-1]}") 2026. 4. 9.
numpy - Boolean Indexing # 'Boolean indexing ' !# array 인덱싱 시, bool 리스트(aka. mask)를 전달하여 True인 경우만 필터링# for 사용하지 않고도 array 에서 '조건'에 맞는 데이터만 추출 하는 기능# 머신러닝 등에 있어서도 많이 사용 # 브로드캐스팅을 활용하여 array로 부터 bool list 얻기# - 예) 짝수인 경우만 찾아보기np.random.seed(41)x = np.random.randint(1, 100, size=10)even_mask = x % 2 == 0# 위와 같이 bool 값으로 이루어진 array 를 Mask 라고도 한다# 위 결과, mask 를 변수에 담아 보겠습니다# boolean mask 로 인덱싱!print(x)print(even_mask)x[eve.. 2026. 4. 8.
numpy - axis (차원축) # numpy 의 많은 함수들은 axis= 파라미터를 갖고 있습니다.# axis (축) 은 각 '차원' 을 의미합니다.# 1차원 array 라면 각 차원에 대한 axis 값은 0 # 2차원 array 라면 각 차원에 대한 axis 값은 0, 1 # 3차원 array 라면 각 차원에 대한 axis 값은 0, 1, 2 # axis= 값을 명시하면 그 함수의 연산 은 해당 axis(축) 에 '따라서' 연산을 수행함 x1 = np.arange(15)np.sum(x1, axis=None)# np.int64(105)x2 = x1.reshape(3, 5)"""array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 1.. 2026. 4. 7.
numpy - shape (차원) 변경하기 ravel(), np.ravel()[ˈrævl]다차원배열을 1차원으로 변경 (흔히 '펼친다'라고 말함)'order' 파라미터'C' - row 우선 변경 , C style'F - column 우선 변경, Fortran styleravel() 은 np 안에 일반 함수로도 있고, 혹은 ndarray 의 멤버함수로서도 존재 flatten()다차원 배열을 1차원으로 변경ravel과의 차이점:copy를 생성하여 변경함(즉 원본 데이터가 아닌 복사본을 반환)ndarray 의 멤버함수로만 제공됨'order' 파라미터'C' - row 우선 변경'F - column 우선 변경x = np.arange(15).reshape(3, 5)x.ravel() # (3, 5) -> (15,)np.ravel(x)x.flatten()# .. 2026. 4. 6.
numpy(2) np.ones, np.zeros, np.eye, np.fullnp.ones(6)#array([1., 1., 1., 1., 1., 1.])np.ones((2, 3), dtype=np.int16)#array([[1, 1, 1],[1, 1, 1]], dtype=int16)# np.zeros(shape) 0 으로 채워진 array 생성, dtype=float64(기본값) 으로 생성됨np.zeros((3, 2, 5))"""array([[[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]], [[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]], [[0., 0., 0., 0., 0.], [0., 0., .. 2026. 4. 5.
numpy(1) [공식] (https://numpy.org/) numpy: 수치적 연산을 위해 최적화된 모듈파이썬을 활용한 데이터 분석에서 가장기본이 자체로도 많이 사용되고 앞으로 배울 pandas머신러닝 등 수많은 분야에서 기본적으로 사용하는 모듈파이썬 개발자라면 꼭 익힐 필요 있다 수학수치 연산 / 합, 평균, 행렬 연산등..추가적으로 scipy, statsmodel 같은 것들도 numpy 기반으로 구현됨.상황에 따라 pandas 안써도 numpy 만으로도 가능. 기본타입: ndarray (n-dimensional array) 다차원 배열 표현 파이썬에 list가 있는데 굳이 사용하는 이유1. 성능 : 성능적으로 훨~씬 빠르다2. 메모리 : 훨씬 적은 메모리 사용3. 제공함수 품부 : 선형대수, 통계관련 여러 수치.. 2026. 4. 3.
RNN : 순서가 있는 데이터를 처리하는 신경망 지금까지 배운 CNN은 이미지처럼 공간적 구조가 있는 데이터를 잘 처리합니다.하지만 순서가 중요한 데이터, 예를 들어 문장이나 음성은 CNN으로 처리하기 어렵습니다.이런 데이터를 처리하기 위해 등장한 것이 RNN(Recurrent Neural Network, 순환 신경망) 입니다.RNN이 필요한 이유아래 문장을 보면:"나는 한국에서 태어났고, ... 나는 ( )어를 유창하게 한다"빈칸에 들어갈 말은 앞에서 나온 "한국" 이라는 정보가 있어야 "한국" 이라고 예측할 수 있습니다.이처럼 이전 데이터가 현재 데이터의 이해에 영향을 주는 데이터를 시퀀스 데이터(Sequence Data) 라고 합니다.시퀀스 데이터의 예:음성 인식 : 앞 단어를 알아야 뒷 단어를 이해할 수 있음자연어 처리 : 문장의 앞부분이.. 2026. 4. 2.
CNN으로 MNIST 손글씨 분류하기 (TensorFlow) 이번엔 Convolutional Neural Network(CNN)를 사용해 MNIST 손글씨 숫자를 분류하는 모델을 구현해보겠습니다.CNN 구현의 전체 흐름은 아래 9단계로 정리할 수 있습니다.1. 하이퍼파라미터 설정2. 데이터 파이프라인 구성3. 모델 구성4. Loss 함수 정의5. Gradient 계산6. Optimizer 선택7. 성능 지표(정확도) 정의8. Checkpoint 저장 (선택)9. 학습 및 검증전체 코드import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.utils import to_categoricalimport numpy as npimport os# 1. 하이퍼파라미터 설정learning_rate = 0.. 2026. 3. 29.
CNN : Convolutional Neural Network 지금까지 배운 Fully Connected Network는 이미지를 1차원으로 펼쳐서(Flatten) 학습했습니다.CNN은 이미지의 공간적 구조를 유지하면서 특징을 추출하는 방법입니다.CNN의 전체 구조는 다음과 같습니다.입력 이미지 → Convolution → ReLU → Pooling → ... → Flatten → Fully Connected → 출력1. Convolution (컨볼루션)개념필터(커널)를 입력 이미지 위에 슬라이딩하며 내적(Dot Product) 연산을 수행하여 특징 맵(Feature Map)을 생성합니다.입력 이미지 필터(3×3) 특징 맵┌─────────────┐ ┌───────┐ ┌─────────┐│ 1 2 3 4 │.. 2026. 3. 29.
Dropout : 과적합을 막는 정규화 기법 Underfitting vs OverfittingNeural Network를 학습시킬 때 두 가지 문제가 발생할 수 있습니다.설명Underfitting학습 데이터 샘플들의 정확도가 매우 낮은 상태Overfitting학습 데이터 샘플들의 정확도는 높지만 새로운 데이터에는 예측 성능이 떨어지는 상태네트워크는 Overfitting을 막고 Underfitting을 피하는 적절한 균형을 찾아야 합니다.Overfitting 해결 방법들Overfitting을 줄이는 방법은 여러 가지가 있습니다.학습 데이터셋 늘리기 : 더 많은 데이터로 일반적인 패턴을 학습L2 Regularization : Weight가 너무 커지지 않도록 패널티를 주는 방법Batch Normalization : 각 레이어의 입력값을 정규화해 학습을.. 2026. 3. 25.
Weight Initialization : 웨이트 초기화의 중요성 Neural Network를 학습시킬 때 W(가중치)의 초기값을 어떻게 설정하느냐에 따라 학습 성능이 크게 달라집니다.왜 Weight 초기화가 중요할까?경사 하강법으로 학습할 때 W는 Loss가 가장 낮은 지점을 향해 이동합니다.이때 어디서 출발하느냐(초기 W값) 에 따라 도달하는 지점이 달라집니다.Loss ↑ │ Local Global │ Minima Minima │ ↓ ↓ │ ╲ ╱╲ ╱ │ ╲ ╱ ╲ ╱ │ ╲╱ ╲ ╱ │ ╲╱ └──────────────────→ WGlobal Minima : Loss가 가장 낮은 진짜 최솟값 → 목표 지점Local Minima : 주변보다는 낮지.. 2026. 3. 25.