[백준 2869번] 달팽이는 올라가고 싶다
·
python/algorithm
문제 개요문제 링크: https://www.acmicpc.net/problem/2869 문제를 설명하자면 어느 날 달팽이가 우물을 올라가기로 결심했습니다.하지만 이 우물의 높이는 V미터이고, 달팽이는 다음과 같은 규칙으로 이동합니다.낮에 A미터 올라감밤에 B미터 미끄러짐이 행동을 반복하면서, 달팽이는 언젠가 꼭대기에 도달하고 말 겁니다.여기서 질문은 이 달팽이는 며칠 만에 우물 꼭대기에 도달할까요? 예를 들어 입력이2 1 5 이 들어왔다면낮에 2미터 올라가고밤에 1미터 미끄러지고우물의 높이는 5미터라는 뜻입니다.진행과정을 자세하게 살펴보겠습니다.날짜아침에 올라감저녁에 미끄러짐위치1일차+2-112일차+2-123일차+2-134일차+2-145일차+2도착!6 그럼 최종적인 정답은 5일이 됩니다. 여기서 핵심은..
중심 극한 정리 (Central Limit Theorem, CLT)
·
Data Analysis
모든 데이터 분석은 통계에서 출발합니다.통계는 기본적으로 추론(Inference)을 통해 샘플 데이터를 발생 시킨 실제 세계(Poplation)를 설명하는 과정으로이것은 통계의 본지인 바로 데이터로부터 의미를 찾는 것입니다. 실제 데이터를 보면 분포가 들쭉날쭉합니다.예를 들어, 연봉 데이터는 오른쪽으로 긴 꼬리를 가진 분포(비대칭), 학생 성적은 중앙값 근처에 몰려있는 분포일 수 있습니다. 그런데도 우리는 평균을 구하고, 신뢰구간을 설정하고, 통계적 검정을 합니다.평균이 정규분포를 따른다는 전제를 대체 왜 믿을 수 있는 걸까요? 중심 극한 정리(CLT)가 무엇인가?중심 극한 정리(Central Limit Theorem)란?표본의 크기가 충분히 크다면, 그 표본들의 평균은 원래 분포와 관계없이 정규분포에 ..
[Numpy] np.dot (Dot Product)
·
python/Pandas | Numpy
왜 dot( )을 써야할까?Dot Product(내적)는 벡터와 행렬 연산에서 가장 기초적이면서 중요한 연산입니다.2개의 벡터를 곱해 하나의 수치(스칼라)로 벡터와 행렬을 곱해 변환을 적용행렬 곱의 기본이자 딥러닝, 선형대수의 핵심Numpy에서는 np.dot( )으로 이 연산을 쉽게 처리할 수 있습니다.np.dot의 수학적 정의를 보겠습니다.두 벡터의 내적은 행렬 곱의 경우에는입니다. 기본문법np.dot(a, b)a, b : 스칼라, 1D 벡터, 2D 행렬 등반환: 내적 결과 (스칼라 or 배열) 1차원 벡터 내적import numpy as npa = np.array([1, 2, 3])b = np.array([4, 5, 6])np.dot(a, b) # → 1×4 + 2×5 + 3×6 = 32 벡터 내적..
[백준 2042번] 구간 합 구하기
·
python/algorithm
문제 개요문제 링크 : https://www.acmicpc.net/problem/2042 해당 문제를 요약해보면 숫자 N개가 있고, 다음 2가지 요청을 반복해서 처리해야하는 문제입니다. 예를 들어 우리는 지금 숫자 카드 N장을 가지고 있다고 가정을 하겠습니다.[1] [2] [3] [4] [5] 이제 다른 사람이 아래 처럼 계속 요청을 하는겁니다.3번째 카드 숫자를 6으로 바꿔주세요.2번째부터 5번째 카드 숫자를 모두 더해주세요.만일 요청이 수십만 번 이상 반복도리 경우 그냥 for문으로 처리한다면, 시간 초과가 날 가능성이 높습니다.그래서 빠르게 처리하는 방법이 필요합니다. 그걸 해결할 수 있는 방법이 세그먼트 트리입니다. 세그먼트 트리란?세그먼트 트리란?- 숫자 카드들을 트리 모양으로 묶어서 관리하는 ..
[백준 11866번] 요세푸스 문제 0 - 큐
·
python/algorithm
문제 개요문제 링크 : https://www.acmicpc.net/problem/11866 요세푸스 문제 (Josephus Problem) 는 다음과 같은 규칙을 가진 사람 제거 시뮬레이션 문제입니다. N명의 사람이 원을 이루고 앉아있고, K번째 사람을 순서대로 제거해 나간다고 할 때,제거되는 사람의 순서를 구하는 문제입니다. 예를 들어 N = 7, K = 3 일 경우 제거 순서는 다음과 같습니다. 7명의 사람이 있고 3번째 사람을 계속 제거한다면1, 2, (3), 4, 5, 6, 7 → 3 제거1, 2, (3), 4, 5, (6), 7 → 6 제거 (7부터 시작)1, (2), (3), 4, 5, (6), 7 → 2 제거 1, (2), (3), 4, 5, (6), (7) → 7 제거 1, (2), (3)..
[Numpy] NaN과 inf 다루는 방법
·
python/Pandas | Numpy
데이터 분석에서 수치 연산이 제대로 되려면, 비정상 값(NaN, inf) 을 먼저 잡아야 합니다.이 값들은 다음과 같은 문제를 일으킵니다.np.mean, np.sum, np.min 등 모든 통계함수를 무력화Pandas/NumPy/Sklearn이 이상하게 작동함조건 필터링이 안 됨, 모델 입력이 망가짐항목 NaN inf / -inf 의미Not a Number무한대 (±∞)발생 원인0/0, sqrt(-1), log(-x)1/0, overflow비교NaN != NaN (항상 False)inf == inf, -inf == -inf감지 방법np.isnan()np.isinf() NaN과 inf를 감지하는 함수 Numpy에서 NaN과 inf를 감지하는 함수들이 있습니다.바로 np.isnan(x), np.isinf..
파생변수 생성 - Feature Engineering
·
Data Analysis
머신러닝 모델을 만들기 전, 단순히 주어진 데이터만 사용하는 것은 부족할 수 있습니다.예를 들어:생년월일 이 있다고 가정을 하면 그대로 사용이 가능할까?승선 인원 이 있는데, 이걸 혼자인지 여부, 가족 수 같은 의미 있는 값으로 바꾸면 더 좋지 않을까?이처럼 기존 변수로부터 새로운 의미 있는 변수를 만들어내는 작업이바로 파생변수 생성(Feature Engineering)입니다. 이 과정은 모델 성능을 극적으로 개선할 수 있으며, 데이터 분석의 핵심이라 해도 과언이 아닙니다. 파생변수 생성 패턴 1. 날짜/시간 파생변수예시: SibSp(형제자매 수), Parch(부모자녀 수) → 가족 수 변수 생성df['FamilySize'] = df['SibSp'] + df['Parch'] + 1 # 자기 자신 포함 ..
[백준 10866번] 덱 – 덱 자료구조 구현
·
python/algorithm
문제 링크: https://www.acmicpc.net/problem/10866분류: 자료구조, 덱, 구현난이도: 실버 4 문재 개요정수를 저장하는 덱(Deque) 을 구현하고 다음 명령들을 처리하는 문제입니다. 입력 예시:15push_back 1push_front 2frontback 출력 예시:21202 문재 해석덱이란?─ Deque (Double-Ended Queue): 양쪽 끝에서 삽입과 삭제가 가능한 큐입니다.push_front, push_back : 앞/뒤로 원소 삽입pop_front, pop_back : 앞/뒤에서 원소 제거size, empty : 현재 덱 크기 및 비었는지 확인front, back : 양쪽 끝의 값을 확인 (단, 삭제하지 않음) 문제 접근 방식단순한 list 사용은 pop(0..
범주형 변수 인코딩 - Label, One-Hot, Ordinal
·
Data Analysis
실제 데이터에는 "남성", "여성" 이나 "서울", "부산" 처럼 문자형(범주형) 데이터가 자주 존재합니다.하지만 머신러닝 모델은 오직 숫자만 입력으로 처리할 수 있기 때문에, 범주형 데이터를 수치형으로 변환하는 과정이 필요합니다.이를 인코드(Encoding)이라고 하며, 데이터 전처리에서 중요한 단계입니다. 왜 인코딩이 필요한가?위에서 말했다 싶이 머신러닝 모델은 오직 숫자만 입력으로 처리할 수 있기 때문에 문자열을 직접 모델에 넣을 수가 없습니다.예를 들어 gneder="남성"은 수치적 연산 불가한 셈입니다.그리고 범주형 변수끼리는 크기 비교가 불가능합니다. "서울" > "부산"을 같은 비교는 의미가 없습니다. 문제 상황 예시 문자열을 직접 모델에 넣을 수 없음gender = "남성"은 수치적 연..
[Numpy] where, argmax, unique, argsort
·
python/Pandas | Numpy
데이터를 조건에 맞게 찾고, 정렬하고, 고유값을 뽑아내는 핵심 함수들입니다.데이터 분석에서 "찾기"는 기본 중의 기본이다.특정 조건에 맞는 위치가 궁금하다 → np.where( )가장 큰 값은 어디인가? → np.argmax( )중복 없이 어떤 값들이 들어 있는가? → np.unique( )정렬 순서를 알고 싶다 → np.argsort( )이 네가지 함수는 조건, 추출, 분류, 정렬, 그룹핑의 기반이 되는 매우 자주 쓰이는 함수들이다. np.where( ) - 조건에 따라 인덱스나 값을 선택● 조건이 True인 인덱스 반환import numpy as npa = np.array([10, 20, 30, 25, 15])np.where(a > 20)# (array([2, 3], dtype=int64),)─ 조건..