티스토리 뷰
SQL 코드카타
Q142. Weather Observation Station 10
1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-10/problem
2. 정답 코드:
SELECT DISTINCT CITY
FROM STATION
WHERE RIGHT(CITY, 1) NOT IN ('a', 'e', 'i', 'o', 'u');
Q143. Weather Observation Station 11
1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-11/problem
2. 정답 코드:
SELECT DISTINCT CITY
FROM STATION
WHERE (LEFT(CITY, 1) NOT IN ('a','e','i','o','u')) OR (RIGHT(CITY, 1) NOT IN ('a','e','i','o','u'));
Q164. Weather Observation Station 19
1. 문제 링크: https://www.hackerrank.com/challenges/weather-observation-station-19/problem
2. 정답 코드:
SELECT ROUND(SQRT(POW(MAX(LAT_N)-MIN(LAT_N), 2)+POW(MAX(LONG_W)-MIN(LONG_W), 2)), 4)
FROM STATION;
-- a = MIN(LAT_N)
-- b = MAX(LAT_N)
-- c = MIN(LONG_W)
-- d = MAX(LONG_W)
3. 오류 상황: 문법 오류
4. 시도 방법: 기존에 작성했던 쿼리에서 잘못 작성된 문법 구문이 있는지 확인
5. 최종 문제 해결 방법: 제곱을 표시할 때, SQL에서는 **를 지원하지 않으므로, POW(대상, 2) 이렇게 변경하여 해결
2차원에서의 유클리드 거리 공식
A(x1, y1), B(x2, y2) 일때,
d = sqrt((x2-x1)^2 + (y2-y1)^2)
Python 코드카타 (https://github.com/heeso0908/codekata.git)
Q50. 가장 가까운 같은 글자 ★★★
1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/142086
2. 정답 코드:
def solution(s):
answer = []
temp = {}
for idx, char in enumerate(s):
if char not in temp:
answer.append(-1)
else:
answer.append(idx - temp[char])
temp[char] = idx
return answer
3. 오류 상황: 수도 코드 작성부터 막힘
4. 시도 방법: 어떻게 해결해야 하는지 힌트를 얻기 위해 생성형 AI 활용
5. 최종 문제 해결 방법: 아래와 같은 방식으로 해결
temp 라는 딕셔너리에 알파벳: 순서 구조로 넣어서 해당 알파벳이 처음 나왔으면 -1을, 두번 이상 나왔으면 가장 가까운 글자와의 인덱스 차이 값을 answer 리스트에 차례대로 넣어줘야 한다!
이 때, enumerate를 사용해서 s에서 idx와 char를 추출하고 이 값을 활용한다.
if 문을 사용하여 temp에 알파벳이 없다면 -1
있다면 현재 보고자 하는 알파벳의 인덱스 값(idx)에서 이전까지 temp에 저장되어 있던 인덱스 값(temp[char])을 빼준다!
for 문의 마지막에 temp[char] = idx 를 해주어 인덱스 값을 갱신해주는게 포인트!
1) 딕셔너리의 구조 (메모장 양식)
딕셔너리는 이름표(Key) : 실제 내용(Value)의 짝꿍
- 이름표 (Key): char (예: 'a', 'b') → 우리가 찾고 싶은 글자
- 실제 내용 (Value): idx (예: 0, 1) → 그 글자가 마지막으로 발견된 방 번호(인덱스)
2) 코드 흐름 다시 보기
한 줄씩 해석해 보자!
for idx, char in enumerate(s): # idx는 방 번호, char는 그 방에 사는 글자
if char not in temp: # 메모장(temp)에 이 글자(char) 이름표가 없으면?
answer.append(-1) # 처음 본 애니까 -1 기록
else: # 메모장에 이미 이 글자(char) 이름표가 있으면?
# (현재 방 번호 idx) - (메모장에 적힌 예전 방 번호 temp[char])
answer.append(idx - temp[char])
# [중요] 방금 본 글자의 위치(idx)를 메모장의 이름표(char) 칸에 최신화!
temp[char] = idx
3) "banana"로 보는 실전 예시
- 1단계 (idx=0, char='b'):
- 메모장에 'b'가 없네? → -1 추가.
- 메모장에 적기: temp['b'] = 0 (이제 'b'는 0번방에 있다고 기억해!)
- 2단계 (idx=1, char='a'):
- 메모장에 'a'가 없네? → -1 추가.
- 메모장에 적기: temp['a'] = 1
- 3단계 (idx=2, char='n'):
- 메모장에 'n'가 없네? → -1 추가.
- 메모장에 적기: temp['n'] = 2
- 4단계 (idx=3, char='a'):
- 메모장에 'a'가 있네! (1번방에 있었다고 적혀 있음)
- 거리 계산: 현재(3) - 과거(1) = 2 → 2 추가.
- 메모장 갱신: temp['a'] = 3 (이제 'a'는 3번방에 있는 게 가장 최신이야!)
💡 요점 정리
- char: 딕셔너리에서 데이터를 찾아낼 때 쓰는 열쇠(Key)
- idx: 딕셔너리에 저장해두는 데이터 값(Value)
- temp[char]: "글자(char) 칸에 적힌 번호(idx)를 가져와!"라는 뜻
+ 딕셔너리와 enumerate 사용 시 참고!
1) 흐름을 시각적으로 비교해 보자
enumerate가 주는 바구니와 우리가 만든 딕셔너리 메모장을 비교해 보자.
| 단계 | enumerate가 던져주는 순서 | 딕셔너리에 저장하는 방식 |
| 순서 | (번호, 글자) | {글자 : 번호} |
| 이유 | 파이썬이 정한 표준 규칙 | 글자로 번호를 찾고 싶어서 우리가 바꿈 |
| 코드 | idx, char | temp[char] = idx |
2) 왜 반대로 뒤집어서 저장했을까?
우리의 목적 때문에!
- 만약 딕셔너리를 temp[idx] = char (번호: 글자) 순서로 저장했다면?
- 나중에 "방금 나온 'a'가 예전에 몇 번 방에 있었지?"라고 물어보고 싶을 때, 열쇠가 '번호'라 'a'라는 글자로는 사물함을 열 수가 없다.
- 그래서 일부러 temp[char] = idx (글자: 번호) 순서로 뒤집어 저장한 것!
- 이렇게 해야 나중에 글자('a')를 열쇠로 써서 그 안에 적힌 번호(1)를 쓱 꺼낼 수 있으니까!
3) 일상생활 비유 (출석부 vs 이름표)
- enumerate (출석부 순서): 선생님이 "1번 홍길동! 2번 김철수!" 하고 부르는 순서 (번호 → 이름)
- temp 딕셔너리 (전화번호부): 우리가 나중에 '홍길동'을 찾아서 전화를 걸어야 하니까, 수첩에는 '홍길동 : 010-...' 순서로 적어두는 것과 같다. (이름 → 정보)
💡 정리하자면
enumerate는 우리에게 재료를 (번호, 글자) 순서로 배달해주지만, 우리는 그 재료를 요리해서 딕셔너리라는 냉장고에 {글자: 번호}라는 우리만의 방식으로 차곡차곡 쌓아두는 것이다. 그래야 나중에 '글자'만 가지고 '번호'를 꺼내 쓰기 편하니까!
라이브 세션) 머신러닝 실습 1일차:
1) 선형 vs 비선형
선형일 때 H(x) = wx + b 사용
비선형은 다른 것
2) Paramertic Models vs Non-parametric Models
3) 실습

의학 데이터나 제조업 데이터 같은 경우 이상치(비정상, 불합격) 데이터가 많지 않기 때문에 stratify=y 로 설정해주는 것이 좋다
4) 밸리데이션을 한번만 하는건 아쉽다 → cross-validation 을 하는 이유! K-Fold
GridSearchCV 가 알아서 크로스-밸리데이션 해준다!
5) train 데이터로만 정보 얻기(ex. 중앙값, 최빈값) → test 데이터로 계산하는 순간 데이터 누수

6) 왜 매번 최적의 하이퍼파라미터를 찾아줘야 할까? 하나만 딱 정하면 안될까?
모든 머신러닝 모델은 Data dependent(데이터 의존적)
→ 단점: 데이터가 편향되어 있으면, 데이터한테 속을 수도 있다
'내일배움캠프 데이터 분석' 카테고리의 다른 글
| 40일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(5), QCC (0) | 2026.02.20 |
|---|---|
| 39일차) 내일배움캠프 데이터 분석 TIL - 머신러닝(4) (0) | 2026.02.19 |
| 37일차) 내일배움캠프 데이터 분석 TIL - 통계(7), 머신러닝(2) (0) | 2026.02.12 |
| 36일차) 내일배움캠프 데이터 분석 TIL - 통계(6), 머신러닝(1) (0) | 2026.02.11 |
| 35일차) 내일배움캠프 데이터 분석 TIL - 통계(5) (0) | 2026.02.10 |
- Total
- Today
- Yesterday
- 코딩처음
- 중학생코딩
- 통계
- 코드카타
- 프로그래밍입문
- Tableau
- GoogleColab
- 데이터시각화
- 구글코랩
- Python
- 데이터분석입문
- 파이썬
- SQL
- 머신러닝
- 텍스트분석
- 코딩기초
- 데이터분석
- 파이썬입문
- Til
- 내일배움캠프
- 태블로
- git
- 비전공자코딩
- 판다스
- github
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
