-
2024-02-03~2024-02-04스파르타/TIL(Today I Learned) 2024. 2. 5. 23:22더보기
SQL 코드카타
Weather Observation Station 18(SQL)(round, max, min, manhattan distance멘허튼 거리?)(간단)
Weather Observation Station 18 | HackerRank
가장 작은값과 큰 값의 lat_n과 long_w의 절대값 차를 구한 뒤 합(Manhattan Distance라고 하는 듯하다 좌표 형식으로 각 각 lat_n중 가장 작은 값과 long_w중 가장 작은 값을 좌표로 가지는 지점과 각각 둘 다에 대해 가장 큰 값을 가지는 지점에 대해 거리를 구하는데 그 거리 구하는 방식을 각각 x좌표, y좌표의 차를 절대값으로 구한 뒤 합하는 방식으로 구함)을 구하는 문제이다
SELECT ROUND(ABS(MAX(s.lat_n)-MIN(s.lat_n))+ABS(MAX(s.long_w)-MIN(s.long_w)),4) FROM station s
Weather Observation Station 19(SQL)(round, max, min, sqrt제곱근, pow거듭제곱, euclidean distance유클리안 거리?)(간단)
Weather Observation Station 19 | HackerRank
앞의 문제와 거리 구하는 것은 동일한데 피타고라스의 공식 사용해서 구하는 방식인 유클리안 거리를 구하는 문제이다.
SELECT ROUND(SQRT(POW(MAX(s.lat_n)-MIN(s.lat_n),2)+POW(MAX(s.long_w)-MIN(s.long_w),2)),4) FROM station s
실무에서 통계적 지표 구할 때정도나 sqrt, pow같은 것 사용할려나?
Population Census(SQL)(sum, left join)(간단)
Population Census | HackerRank
city 테이블과 country 테이블을 이용하여 대륙이 아시아인 모든 도시의 인구의 합을 구하는 문제이다.
SELECT SUM(ci.population) FROM city ci LEFT JOIN country co ON ci.countrycode = co.code WHERE co.continent = 'Asia'
African Cities(SQL)(left join)(간단)
city 테이블과 country 테이블을 이용하여 대륙이 아프리카인 모든 도시의 이름을 표시하는 문제이다.
SELECT ci.name FROM city ci LEFT JOIN country co ON ci.countrycode = co.code WHERE co.continent = 'Africa'
Average Population of Each Continent(SQL)(truncate, floor, join, group by, 버림하여 정수표현)(간단)
Average Population of Each Continent | HackerRank
각 대륙별로 해당되는 도시들의 평균 인구를 출력하는 문제이다
LEFT Join을 했기에 눈치챌 수 있었는데
Antarctica 대륙의 나라 HMD, SGS는 city테이블에 관련 데이터가 없다
North America 대륙의 여러 나라들도 city테이블에 관련 데이터가 없다
따로 언급도 없고 다들 (inner) join으로 푼듯하여 그것으로 해서 제출하였다
SELECT co.continent, TRUNCATE(AVG(ci.population),0) FROM country co JOIN city ci ON ci.countrycode = co.code GROUP BY co.continent
다들 floor로 한듯해서 truncate로 해도 되는 것 아닌가 해서 해보았는데 처음에는 round처럼 자릿수 생략 가능한 줄 알고 생략했다가 에러가 떠서 0을 넣어주었다 truncate는 생략이 불가능한 듯하다
그리고 확실히 정수로 표현되게 버림 할 것이라면 floor를 쓰는 것이 편하다는 것을 확인하였다(자릿수 신경 쓸 필요가 없으니)
SELECT co.continent, FLOOR(AVG(ci.population)) FROM country co JOIN city ci ON ci.countrycode = co.code GROUP BY co.continent
Binary Tree Nodes(SQL)(case when 안에 exists사용)
Binary Tree Nodes | HackerRank
binary tree의 node가 무슨 종류의 노드인지 구별하는 문제이다.
SELECT b.n, CASE WHEN b.p is NULL THEN "Root" WHEN EXISTS (SELECT * FROM bst b2 WHERE b.n = b2.p) THEN "Inner" ELSE "Leaf" END node_type FROM bst b ORDER BY b.n
먼저 parent가 없다면 Root이므로 그렇게 정해줬고 있다면 그 노드를 parent로 가지는 노드가 존재하는지 EXSIST를 사용하여 확인해준 뒤 존재한다면 Inner로 판단해주었고, 마지막으로 그 외의 경우는 parent는 존재하지만 그 노드를 parent로 가지는 노드는 존재하지 않는 경우이기에 Leaf로 판단해주었다
간만에 hackerrank에서 의미있는 푸는 보람이 있는 문제를 푼 것 같아서 기쁘다
'스파르타 > TIL(Today I Learned)' 카테고리의 다른 글
2024-02-06 (0) 2024.02.06 2024-02-05 (1) 2024.02.05 2024-02-02 (0) 2024.02.02 2024-02-01 (0) 2024.02.01 2024-01-31 (0) 2024.01.31