티스토리 뷰
Python 코드카타 (https://github.com/heeso0908/codekata.git)
Q45. 시저 암호 ★★★
1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12926
2. 정답 코드:
def solution(s, n):
answer = ''
# 공백 처리
for char in s:
if char == ' ':
answer += ' '
# 대문자 처리
elif char.isupper():
new_char = chr((ord(char) - ord('A') + n) % 26 + ord('A'))
answer += new_char
# 소문자 처리
elif char.islower():
new_char = chr((ord(char) - ord('a') + n) % 26 + ord('a'))
answer += new_char
return answer
3. 오류 상황: 문제에 핵심적으로 들어가야 하는 개념을 모름
4. 시도 방법: 방법을 학습하기 위해 생성형 AI를 활용함
5. 최종 문제 해결 방법:
개념 자체가 아예 생소해서 AI를 통해 학습해 보았다.
사고의 흐름 (수도코드)
- 문자열의 글자를 하나씩 꺼내어 반복문을 돌린다.
- 이 글자가 공백이면? 그대로 결과에 붙인다.
- 이 글자가 대문자라면?
- 'A'로부터 얼마나 떨어져 있는지 계산한다.
- 거기에 n을 더한다.
- 26으로 나눈 나머지를 구해 범위를 유지한다.
- 다시 문자로 바꿔 결과에 붙인다.
- 이 글자가 소문자라면? (위와 동일하게 'a'를 기준으로 처리)
힌트 1: 문자는 사실 '숫자'이다
컴퓨터는 'A'를 문자 그대로 저장하지 않고, 특정 숫자(아스키 코드)로 기억한다.
- 핵심 도구: 파이썬이라면 ord() 함수로 문자를 숫자로 바꾸고, chr() 함수로 숫자를 다시 문자로 바꿀 수 있다.
- 예: ord('A') → 65, chr(65) → 'A'
힌트 2: 'Z'를 넘어가면 다시 'A'로 돌아오기
이 문제의 가장 큰 고비는 "Z(또는 z)를 넘었을 때 어떻게 다시 A(또는 a)로 돌아가느냐"이다.
- 수학적 힌트: 알파벳은 총 26개이다. 어떤 숫자를 26으로 나눈 나머지(modulo, %)를 이용하면 순환 구조를 만들 수 있다.
- 공식: (현재 위치 - 시작 위치 + 이동 거리) % 26 + 시작 위치
힌트 3: 대문자, 소문자, 공백은 각자의 길이 있다
- 공백: 조건에 있듯이 공백은 밀어도 공백이다. if s[i] == ' ': 처럼 예외 처리를 먼저 해야한다.
- 대/소문자: 'A'와 'a'는 아스키 코드 값이 다르다. 대문자인지 소문자인지 먼저 판별한 뒤, 각각의 시작점('A' 또는 'a')을 기준으로 계산해야 한다.
아스키 코드 값
| 구분 | 문자 (Start) | 아스키 코드 | 문자 (End) | 아스키 코드 |
| 대문자 | A | 65 | Z | 90 |
| 소문자 | a | 97 | z | 122 |
| 공백 | (Space) | 32 | - | - |
문제에 주로 활용되는 개념 자체를 몰라서 AI를 이용해 학습해 보았다.
알파벳은 총 26글자이므로 이를 활용해 new_char = chr((ord(char) - ord('A') + n) % 26 + ord('A')) 식을 작성하여 문제를 푸는 것이 핵심이었다!
이런 식은 내가 직접 생각해 내기에는 어려운 부분이 있어서 코드를 외워야 더 수월하게 풀 수 있을 것 같다.
또, 대문자/소문자/공백 처리도 isupper(), islower() 등을 활용해 간단히 작성할 수 있다는 것도 기억해야 겠다.
라이브 세션) 통계 실습 2일차: 확률 기초와 확률 분포
이상치 판별 기준
- IQR 분포 비대칭일 때 쓰면 좋고
- z-score 분포가 정규분포일 때 쓰면 좋다
- 도메인 지식 기반 제거 (필수)
- 나이가 음수 X
- 자동차의 연비가 상용 출시되는 것보다 엄청 높다? X
이상치는 무조건 제거해야할까??
왜 표본분산은 N이 아니라 N-1 로 나눌까? (베셀 보정)
분산을 구할 때 이미 평균을 알고 있으니까 자유도가 1 작아진다(n-1)
3개 숫자 평균 구할 때 2개만 알고 있어도 나머지 하나는 알 수 있으니까
작은 표본일 때 n-1 사용한다고 생각, 큰 표본일 수록 -1 의 영향이 적기 때문
| 표본 크기 | 영향 |
| 작은 표본 (n < 30) | 자유도 무시하면 큰 오류 발생 |
| 큰 표본 (n > 100) | 별 차이 없음 |
ddof = Delta Degrees of Freedom (자유도 조정값)
ddof=1: 자유도 1 빼기 (표본분산) - pandas 기본값
ddof=0: 자유도 안 빼기 (모분산)
변동계수(CV)
: 단위가 서로 다른 변수 간 비교, 스케일이 다른 변수 간 비교
CV = 표준편차 / 평균 * 100%
- CV가 크면 변동이 크니까 정보량이 많다(정보량이 많다 = 예측하기 어렵다, 파악하기 어렵다, 해석하기가 어렵다)
왜도(Skewness)와 첨도(Kurtosis)
1) 왜도: 데이터가 어느 쪽으로 치우쳐 있나?
| 왜도 값 | 분포 모양 | 의미 | 예시 |
| = 0 | 좌우 대칭 | 양쪽이 거울처럼 같음 | 키, IQ 분포 |
| > 0 (양의 왜도) | 오른쪽 꼬리가 김 | 대부분 작은 값, 가끔 큰 값 | 연봉, 집 값 |
| < 0 (음의 왜도) | 왼쪽 꼬리가 김 | 대부분 큰 값, 가끔 작은 값 | 시험 점수(쉬운 시험) |
2) 첨도: 극단적인 일이 얼마나 자주 일어나나?
| 첨도 값 (초과 첨도) | 꼬리 두께 | 의미 | 극단값 발생 |
| = 0 | 정규분포와 동일 | 기준(정규분포) | 보통 |
| > 0 (양의 첨도) | 꼬리가 두꺼움 | 극단값이 예상보다 자주 발생 | 많음 |
| < 0 (음의 첨도) | 꼬리가 얇음 | 극단값이 거의 없음 | 적음 |
극단값과 이상치
| 용어 | 의미 | 판단 기준 | 예시 |
| 극단값 (Extreme Value) | 분포의 꼬리에 있는 드문 값 | 상대적 위치 | 억대 연봉자 |
| 이상치 (Outlier) | 데이터 패턴에서 벗어난 비정상적인 값 | 통계적 기준 (IQR, Z-score) | 연봉 -500만원 (입력 오류) |
- 극단값은 자연스러운 변동이지만, 이상치는 오류나 특수 상황일 수 있다
- 모든 극단값이 이상치는 아니다
- 극단값 안에 이상치가 포함된다

- 4분보다는 2분이 나올 확률이 더 크다(우도)
- 실제 4분과 2분의 확률은 0이긴 함
확률밀도함수(연속형)와 확률질량함수(이산형)
1) 확률밀도함수: 범위의 등호 중요 X
2) 확률질량함수: 범위의 등호 중요 O
3) CDF를 활용한 확률 계산
| 계산하고 싶은 것 | 공식 | scipy.stats 메서드 |
| P(X ≤ x) | F(x) | dist.cdf(x) |
| P(X > x) | 1- F(x) | dist.sf(x) |
| P(a < X ≤ b) | F(b) - F(a) | dist.cdf(b) - dist.cdf(a) |
| P(X ≥ x) | 1 - F(x-1) (이산형) | dist.sf(x-1) 또는 1 - dist.cdf(x-1) |
- 푸아송(포아송) 분포 - 단위 시간 동안 몇 번 일어날까?
- 지수 분포 - 한 번 일어날 때 얼마나 걸릴까?
- 푸아송의 lambda → 단위 시간당 평균 lambda번 발생
- 지수분포의 1/lambda → 사건이 발생하기 까지 걸리는 평균 시간
라이브 세션) 통계 이론 3일차: 추론 통계
1) 예언 구간 vs 신뢰 구간
- 예언 구간: 개별 값의 불확실성, 값 하나를 예측
- 신뢰 구간: 평균 추정의 불확실성, 평균이 어디에 속할지를 예측
표준 정규의 ± 1.96은 일반 정규에서 (μ ± 1.96σ)로 변환
2) 정규분포 vs t 분포 차이
- σ를 알면, 정규 분포 → ± 1.96
- σ를 모르면, 표본 s 사용 → t 분포
- t 분포: 꼬리가 두꺼움 → 더 넓은 구간 필요
- n ↑ → t 분포가 정규에 수렴
요약 정리
- 정규분포: 숫자 하나는 못 맞춘다! 구간으로 말해야 한다!
- 표본 오차: 실수가 아니라 무작위 추출 때문에 생기는 오차
- 큰 수의 법칙: 표본이 많을수록 평균은 모집단에 가까워진다
- 중심 극한 정리(CLT): 표본 평균은 정규 분포로 근사된다
- 신뢰 구간: 표본으로 모집단 평균을 범위로 추정 (소표본 = t, 대표본 ≈ 정규)
- 표본 설계 주의: 대표성·무작위성·독립성이 무너지면 다 틀린다
확인!
Q1. 표본 오차는 계산 실수다?
→ X, 무작위 추출로 인한 자연스러운 오차
Q2. 신뢰구간은 μ가 왔다갔다 하는 것이다?
→ X, μ는 고정, 구간이 흔들린다
Q3. 표본이 많아질수록 평균은 모집단 평균에 가까워진다
→ O, 큰 수의 법칙
3) 가설 검정
: 차이가 우연인지 효과인지 판단하는 절차
- 귀무가설(H0): 효과가 없다
- 대립가설(H1): 효과가 있다
→ H0에서도 큰 차이가 나올 확률? p-value
실습 시간에 다양한 확률 분포를 배웠는데, 특히 확률질량함수와 확률밀도함수를 활용하는 scipy.stats의 핵심 메서드들이 생소하고 어렵게 느껴졌다.
과제를 진행하면서 직접 코드를 작성해보니 어떤 내용인지 조금씩 감이 잡히는 것 같지만, 여전히 쉽지는 않다는 생각이 든다. 주말에도 시간을 투자해 남은 과제를 마무리하고, 통계 개념을 다시 정리하며 학습을 이어가야겠다.
'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 35일차) 내일배움캠프 데이터 분석 TIL - 통계(5) (0) | 2026.02.10 |
|---|---|
| 34일차) 내일배움캠프 데이터 분석 TIL - 통계(4) (0) | 2026.02.09 |
| 32일차) 내일배움캠프 데이터 분석 TIL - 통계(2) (1) | 2026.02.05 |
| 31일차) 내일배움캠프 데이터 분석 TIL - 통계(1) (0) | 2026.02.04 |
| 30일차) 내일배움캠프 데이터 분석 TIL - 성취도 평가 (0) | 2026.02.03 |
- Total
- Today
- Yesterday
- 파이썬입문
- 통계
- Tableau
- 텍스트분석
- SQL
- 중학생코딩
- 태블로
- 구글코랩
- 데이터분석입문
- 데이터분석
- 내일배움캠프
- Til
- 프로그래밍입문
- 비전공자코딩
- 데이터시각화
- 코딩처음
- 판다스
- git
- Python
- 파이썬
- github
- 코드카타
- 머신러닝
- GoogleColab
- 코딩기초
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
