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
def solution(X, Y):
answer = ''
numx = {str(n):0 for n in range(10)}
numy = {str(n):0 for n in range(10)}
for x in X:
numx[x] += 1
for y in Y:
numy[y] += 1
for k in range(9, -1, -1):
k = str(k)
iternum = min(numx[k], numy[k])
if answer == '' and k == '0' and iternum != 0:
return "0"
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조 테스트
- 군집분석 결과를 바탕으로 테스트까지 만들어내신 게 대단함
통계 + 머신러닝 개인 과제
과제 풀 때 참고할 내용
과제 내용 및 풀이
회고
- 내일부터는 또 다른 분들과 팀을 이뤄서 새로운 걸 배우고 다음주에는 새로운 팀 프로젝트도 해야 한다... 화이팅...