Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/해커랭크

[해커랭크Easy] (2024) Weather Observation Station 5, 기상 관측소 5(설명/코드/정답)

_hyeri 2024. 2. 16. 14:01

 

문제 링크 : 

https://www.hackerrank.com/challenges/weather-observation-station-5/problem

 

 

1. 요구 사항 이해

가장 짧은 도시 이름과 가장 긴 도시 이름을 가진 도시와 이름 길이를 출력. 

 

 

 

 

2. 설계/검증 

✔️ 같은 순위가 있으면 알파벳 순서가 가장 처음인 것 하나만 출력

- ROW_NUMBER() 윈도우 함수 사용

 

✔️ 문자열 길이를 구하는 LENGTH

 

 

 

 

3. 정상 코드

방법 1. ROW_NUMBER(번호 매기는 함수) 윈도우 함수 사용. 

SELECT CITY, LENGTH(CITY)
FROM(SELECT CITY, LENGTH(CITY), 
            ROW_NUMBER() OVER(PARTITION BY LENGTH(CITY) ORDER BY LENGTH(CITY) DESC, CITY) AS NUM
     FROM STATION
     WHERE LENGTH(CITY) = (SELECT MAX(LENGTH(CITY)) FROM STATION)
        OR LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) FROM STATION)) AS INLINEV   
WHERE NUM=1


/* 출력 결과
Amo 3
Marine On Saint Croix 21
*/

 

방법 2. UNION 사용

(SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) ASC, CITY
LIMIT 1)
UNION
(SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY
LIMIT 1)


/*실행 결과 
Amo 3
Marine On Saint Croix 21
*/

* UNION 할 테이블을 소괄호로 구분지어야 한다. 

 

 

내부 동작 순서 

 

FROM 절 인라인 뷰 (

1. FROM 절

STATION 테이블을 대상으로 합니다.

 

2. WHERE 절 

CITY의 길이가 최대(MAX(LENGTH(CITY))) 또는 최소(MIN(LENGTH(CITY)))인 행만 선택합니다.

 

3. SELECT 절 

CITY, LENGTH(CITY), 그리고 ROW_NUMBER()를 사용하여 LENGTH(CITY)를 기준으로 내림차순으로 정렬하고, 길이가 같은 경우 CITY를 오름차순으로 정렬한 순서에 따라 각 행에 순서를 매깁니다.

)

 

4. WHERE 절 

NUM이 1인 행만 선택합니다. 이는 서브쿼리 내부에서 매긴 순서 중 첫 번째 행을 의미합니다.

 

5. SELECT 절 

CITY와 해당 CITY의 길이(LENGTH(CITY))를 선택합니다.

 

 

 

4. 추가 정리

윈도우 함수 Windon Function

특정 윈도우(또는 범위)에 대해 연산을 수행하고 결과를 반환하는 함수
특히 정렬된 데이터에 대한 집계나 분석 작업을 수행할 때 유용