Today I Learned

[내일배움캠프 QA/QC 6기] TIL #037

JiJi0406 2026. 7. 2. 21:04

 

001

오늘의 코드카타

48. K번째수

 

 


문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

 

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 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를 낮음/중간/높음으로 나누기)

 

 


 

 

개노답 삼형제... 아실랑가

오늘 튜터님 말씀 듣고 뭔가 색다른 내용 넣고 싶어서... 유명한 밈 따라서 만화를 만들어봤다.

주제는... 머신러닝 알고리즘 삼대장 ㅋㅋ