ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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)(간단)

    African Cities | HackerRank

    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
Designed by Tistory.