001
오늘의 코드카타
48. K번째수
문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.
입출력 예
| array | commands | return |
| [1, 5, 2, 6, 3, 7, 4] | [[2, 5, 3], [4, 4, 1], [1, 7, 3]] | [5, 6, 3] |
입출력 예 설명
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.
def solution(array, commands):
return [sorted(array[i-1:j])[k-1] for i, j, k in commands]
1. for문으로 commands에서 3개씩 뽑아오고 (i,j,k)
2. array의 i번째(i-1)부터 j번째까지 뽑아온 뒤 sorted로 정렬
3. 정렬된 리스트에서 k-1번째 숫자만 빼서 리스트에 담아 return
다른 사람 풀이 보니까 람다랑 맵 함수 썼던데....언제쯤 스스로 생각해서 푸려나?
002
오늘 학습한 내용
[ 통계 & 머신러닝 개인 과제 ]
오늘 심화 문제 풀었다. 도전 문제 좀 오래동안 잡고 있다가 마감 시간 겨우 지켜서 제출함..
1. 랜덤 포레스트 (Random Forest)
- 의사결정나무 여러 개를 만들어서(배깅) 다수결로 최종 결론을 내는 앙상블 모델
- 나무 하나만 쓸 때의 과적합+불안정성 문제를 여러 나무로 보완
- 이상치에 견고하고 스케일링 불필요, feature_importances_로 변수 중요도도 뽑을 수 있음
# 독립변수(X) / 종속변수(y) 설정
features = ['rotational_speed', 'torque', 'tool_wear', 'Type_encoded']
X = df[features]
y = df['machine_failure']
# Train set / Test set (30%) 분리 / random_state : 42
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)
# 랜덤 포레스트 모델 학습 / random_state : 42
rf_model = RandomForestClassifier(random_state = 42)
rf_model.fit(X_train, y_train)
2. 로지스틱 회귀 (Logistic Regression)
- Y가 0 또는 1인 분류 문제에서 특정 클래스일 확률을 예측하는 모델
- 선형회귀처럼 계수(coef_)를 뽑을 수 있는데, 계수가 양수면 해당 변수가 커질수록 고장 확률이 올라가는 거고 음수면 내려가는 것
- 보통 0.5를 임계값으로 잡아서 그 이상이면 고장(1)로 예측
# 독립변수(X) / 종속변수(y) 설정
features = ['air_temp', 'process_temp', 'torque']
X = df[features]
y = df['machine_failure']
# Train set / Test set (30%) 분리 / random_state : 42
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)
# 로지스틱 회귀 모델 학습
model_lor = LogisticRegression()
model_lor.fit(X_train, y_train)
3. 피처 엔지니어링 (Feature Engineering)
- 기존 데이터를 가공해서 모델이 더 잘 학습할 수 있도록 새로운 변수를 만들거나 불필요한 변수를 제거하는 작업
* 주요 방법
- 변수 생성: 기존 변수 조합해서 새 변수 만들기 (예: torque × rotational_speed = 실제 투입 동력)
- 변수 선택 고장과 상관없는 변수는 제거 (예: 불필요한 ID 컬럼)
- 인코딩: 범주형 변수를 숫자로 변환 (레이블 인코딩 or 원-핫 인코딩)
- 스케일링: 변수 간 단위 차이로 인한 왜곡 방지 (StandardScaler, MinMaxScaler)
- 구간화: 연속형 변수를 구간으로 나눠서 범주형으로 변환 (예: tool_wear를 낮음/중간/높음으로 나누기)
개노답 삼형제... 아실랑가
오늘 튜터님 말씀 듣고 뭔가 색다른 내용 넣고 싶어서... 유명한 밈 따라서 만화를 만들어봤다.
주제는... 머신러닝 알고리즘 삼대장 ㅋㅋ

'Today I Learned' 카테고리의 다른 글
| [내일배움캠프 QA/QC 6기] TIL #039 (0) | 2026.07.06 |
|---|---|
| [내일배움캠프 QA/QC 6기] TIL #038 (0) | 2026.07.03 |
| [내일배움캠프 QA/QC 6기] TIL #036 (0) | 2026.07.01 |
| [내일배움캠프 QA/QC 6기] TIL #035 (0) | 2026.06.30 |
| [내일배움캠프 QA/QC 6기] TIL #034 (0) | 2026.06.29 |