티스토리 뷰

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를 통해 학습해 보았다.

사고의 흐름 (수도코드)

  1. 문자열의 글자를 하나씩 꺼내어 반복문을 돌린다.
  2. 이 글자가 공백이면? 그대로 결과에 붙인다.
  3. 이 글자가 대문자라면?
    • 'A'로부터 얼마나 떨어져 있는지 계산한다.
    • 거기에 n을 더한다.
    • 26으로 나눈 나머지를 구해 범위를 유지한다.
    • 다시 문자로 바꿔 결과에 붙인다.
  4. 이 글자가 소문자라면? (위와 동일하게 '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의 핵심 메서드들이 생소하고 어렵게 느껴졌다.
과제를 진행하면서 직접 코드를 작성해보니 어떤 내용인지 조금씩 감이 잡히는 것 같지만, 여전히 쉽지는 않다는 생각이 든다. 주말에도 시간을 투자해 남은 과제를 마무리하고, 통계 개념을 다시 정리하며 학습을 이어가야겠다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
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
글 보관함