49일차

Suhyeon Lee·2024년 12월 9일

CodeKata

SQL

158. Weather Observation Station 13

  • 작성한 쿼리
SELECT
  ROUND(SUM(lat_n),4)
FROM
  station
WHERE
  lat_n > 38.7880
  AND lat_n < 137.2345
;

159. Weather Observation Station 14

  • 작성한 쿼리
SELECT
  ROUND(MAX(lat_n),4)  
FROM
  station
WHERE
  lat_n < 137.2345
;

160. Weather Observation Station 15

  • 작성한 쿼리
SELECT
  ROUND(long_w, 4)
FROM
  station
WHERE
  lat_n < 137.2345
ORDER BY
  lat_n DESC
LIMIT 1
;

161. Weather Observation Station 16

  • 작성한 쿼리
SELECT
  ROUND(MIN(lat_n),4)
FROM
  station
WHERE
  lat_n > 38.7780
;

162. Weather Observation Station 17

  • 작성한 쿼리
SELECT
  ROUND(long_w,4)
FROM
  station
WHERE
  lat_n > 38.7780
ORDER BY
  lat_n
LIMIT 1
;

163. Weather Observation Station 18

  • 작성한 쿼리
SELECT
  ROUND((MAX(lat_n)-MIN(lat_n))+(MAX(long_w)-MIN(long_w)), 4)
FROM
  station
;

Manhattan distance

164. Weather Observation Station 19

  • 작성한 쿼리
SELECT
  ROUND(SQRT(POW(MAX(lat_n)-MIN(lat_n), 2)+POW(MAX(long_w)-MIN(long_w), 2)), 4)
FROM
  station
;

Euclidean distance

MySQL 내장함수

Python

63. 숫자 짝꿍

  • 작성한 코드
def solution(X, Y):
    answer = ''
    for i in range(9, -1, -1):
        answer += (str(i) * min(X.count(str(i)), Y.count(str(i))))
    if answer == '':
        return '-1'
    elif len(answer) == answer.count('0'):
        return '0'
    else:
        return answer

참고할 만한 다른 풀이

from functools import reduce
import re
def solution(X, Y):
    result = "".join(sorted(reduce(lambda result, i: result + i*min(X.count(i), Y.count(i)), map(str, range(10)), ""), reverse=True)) or "-1"
    return "0" if re.match(r"0+", result) else result
# 1. 뭘 대상으로 반복문을 돌릴지... X? Y? no.. 0 ~ 9까지 10개만!
# 2. 정렬하지 않고도 자동으로 정렬이 되게 하는 법? (sort는 시간을 많이 잡아먹음..)

def solution(X, Y):
    answer = ''
    # ★ 포인트1. 반복되는 숫자를 저장하기 위한 dictionary (key: 0 ~ 9)
    numx = {str(n):0 for n in range(10)}
    numy = {str(n):0 for n in range(10)}
    
    # X 문자열 하나씩 돌면서 카운트
    for x in X:
        numx[x] += 1
    
    # Y 문자열 하나씩 돌면서 카운트
    for y in Y:
        numy[y] += 1
    
    # ★ 포인트2. 9부터 0까지 반복문 돌기. sort를 안 하기 위함.
    #           짝꿍을 큰 수부터 더해가면 자동으로 제일 큰 수가 됨.
    for k in range(9, -1, -1):
        k = str(k)
        iternum = min(numx[k], numy[k])
        
        # ★ 포인트3. "000" -> "0"으로 만들어주기 위한 조건문
        if answer == '' and k == '0' and iternum != 0:
            return "0"
        
        # 실패 코드 #############################
        # for _ in range(iternum):             #
        #     answer = ''.join([answer, k])    #
        ########################################
        # 성공 코드 ★★★★★
        # '9'*3 = '999'가 되는 원리를 이용
        answer = ''.join([answer, k*iternum])  
        ########################################
    
    if answer == '':
        return "-1"
    else:
        return answer
  • 공통된 부분을 찾기 위한, for문의 기준 잡기
    • X, Y가 아닌 0~9의 10개 숫자로 기준 잡아서 돌리기
  • sort함수를 안 쓰고 시간 단축하는 원리 알기
    • for k in range(9, -1, -1)로 자동으로 큰 정답 구하기
  • 반복된 문자열을 효울적으로 더하는 방법
    • 반복문 보다 [문자열] * [숫자] 테크닉 이용하기
def solution(X, Y):
    result = ''
    a = [0,0,0,0,0,0,0,0,0,0]
    b = [0,0,0,0,0,0,0,0,0,0]
    
    for i in X:
        value = int(i)
        a[value] += 1
    
    for i in Y:
        value = int(i)
        b[value] += 1
    
    for i in range(9,-1,-1):
        value = str(i) * min(a[i],b[i])
        result += value
 
    if(len(result) == 0):
        return '-1'
    if(result[0] == '0'):
        return '0'
              
    return result
  • 각각의 문자열에서 0~9 까지의 숫자가 몇 개 존재하는지 확인할 수 있는 리스트 a,b를 생성
  • for문을 이용하여 X와 Y에 대해 각각의 숫자가 몇번 나왔는지 카운트
  • 9부터 0까지 1씩 감소하며 a[i] 와 b[i]의 값을 이용하여 해당 숫자가 몇 번 겹치게 되었는지 확인 후, 중복되는 수만큼 결과값에 추가
  • 결과의 길이가 0인 경우, 첫번째 값이 '0'인 경우, 그외의 경우로 나누어 결과값을 출력
def solution(X, Y):
    xList = list(X.count(str(x)) for x in range(10))
    yList = list(Y.count(str(y)) for y in range(10))
    answer = ""
    for i in range(9, -1, -1):
        answer += str(i) * min(xList[i], yList[i])

    if answer == "":
        return "-1"
    elif answer[0] == "0" and answer[len(answer) - 1] == "0":
        return "0"
    else:
        return answer
from collections import Counter, defaultdict
def solution(X, Y):
    x, y = list(X), list(Y)
    arr = []
    answer = ""

    c_x, c_y = Counter(x) , Counter(y)
    for key in c_x.keys():
        if key in c_y.keys():
            arr.append((int(key), min(c_x[key], c_y[key])))

    if not arr:
        return "-1"
    elif len(arr) == 1 and arr[0][0] == 0:
        return "0"

    arr = sorted(arr, key = lambda x : x[0], reverse= True)

    for ar in arr:
        answer += str(ar[0]) * int(ar[1])
    return answer

팀 프로젝트

4조 datapane

  • '분류 안 됨' 분류를 넣어 결측치를 없앤 부분이 좋았음
  • price는 안 건들이는 게 좋다는 튜터님의 말씀
  • PCA를 6, 7, 8로 하면?
    • 각각 차원에 존재하는 걸 합쳐주는 거라 속성에 대해서 결과적으로는 정확도가 높아질 수밖에 없음
      • 10개의 컬럼을 1개의 속성으로 설명
      • 10개의 컬럼을 6개의 속성으로 설명
      • 컬럼 10개의 컬럼을 10개의 속성으로 설명
      • 10개의 컬럼을 11개의 속성 → 불가능
    • PCA는 결국 "우리"가 눈으로 보기 위한 것이므로 2, 3을 넘지 않도록 주의(6, 7, 8은 시각화 불가능하니까)

2조 테스트

  • 군집분석 결과를 바탕으로 테스트까지 만들어내신 게 대단함

통계 + 머신러닝 개인 과제

과제 풀 때 참고할 내용
과제 내용 및 풀이

회고

  • 내일부터는 또 다른 분들과 팀을 이뤄서 새로운 걸 배우고 다음주에는 새로운 팀 프로젝트도 해야 한다... 화이팅...
profile
2 B R 0 2 B

0개의 댓글