데이터 분석/SQL

[SQL] HackerRank Weather Observation Station 10, 11, 12 - 정규표현식 활용

된장찌개냠냠 2024. 5. 21. 11:29
반응형

정규표현식을 활용한 HackerRank Weather Observation Station 6, 7, 8, 9번 문제 풀이는 이전 포스팅을 참고해주세요

2024.05.21 - [데이터 분석/SQL] - [SQL] HackerRank Weather Observation Station 6, 7, 8, 9 - 정규표현식 활용

 

 

정규표현식 활용 HackerRank 문제 풀이

이전 포스팅에서와 마찬가지로 Weather Observation Station 10, 11, 12 문제도 마찬가지로 아래 STATION 테이블을 사용할 예정입니다. HackerRank에서 MySQL 사용을 기준으로 문제 풀이를 진행했습니다.

# STATION 테이블

| Field  | Type         |
|--------|--------------|
| ID     | NUMBER       |
| CITY   | VARCHAR2(21) |
| STATE  | VARCHAR2(2)  |
| LAT_N  | NUMBER       |
| LONG_W | NUMBER       |

 

 

문제: Weather Observation Station 10

문제링크: https://www.hackerrank.com/challenges/weather-observation-station-10/problem

 

Weather Observation Station 10 | HackerRank

Query a list of CITY names not ending in vowels.

www.hackerrank.com

Query the list of CITY names from STATION that do not end with vowels. Your result cannot contain duplicates.

 

모음으로 끝나지 않는 도시명(city)을 중복 제거 후 출력하는 문제입니다. 아래와 같이 정답을 작성할 수 있습니다.

SELECT DISTINCT city FROM STATION
WHERE REGEXP_LIKE(city, '[^aeiou]$', 'i')

 

앞선 Weather Observation Station 9번 문제와 유사한데, 정규표현식을 작성하는 부분에 ^[^aeiou] 대신 [^aeiou]$ 을 작성해줬습니다. $은 문자열의 끝을 의미하므로, 'aeiou'가 아닌 문자로 끝나는 문자열을 뜻합니다.

 

정규표현식을 사용하지 않고 아래와 같이 정답 작성도 가능합니다.

SELECT DISTINCT city FROM STATION
WHERE SUBSTR(city, -1, 1) NOT IN ('a', 'e', 'i', 'o', 'u')

 

위 쿼리에서 SUBSTR 함수는 문자열의 일부를 잘라서 가져오는 용도로 사용했는데요. 문자열의 마지막(2번째 인자: -1)에서 1개(3번째 인자: 1)만큼의 문자열을 가져오는 것이니 가장 마지막 문자를 가져오는 것이죠. 그렇게 가져온 마지막 글자가 모음(aeiou) 중 하나에 속하지 않는다는 것을 의미하는 쿼리입니다.

 

 

문제: Weather Observation Station 11

문제링크: https://www.hackerrank.com/challenges/weather-observation-station-11/problem

 

Weather Observation Station 11 | HackerRank

Query a list of CITY names not starting or ending with vowels.

www.hackerrank.com

Query the list of CITY names from STATION that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.

 

이번 문제는 모음으로 시작하지 않거나(OR) 모음으로 끝나지 않는 고유한 도시명(city)을 출력하는 문제입니다. OR 조건이므로 하나의 조건만 충족하면 되겠습니다. 아래와 같이 정답을 작성할 수 있습니다.

# REGEXP_LIKE 사용 (1)
SELECT DISTINCT city FROM STATION
WHERE REGEXP_LIKE(city, '^[^aeiou]|[^aeiou]$', 'i') 

# REGEXP_LIKE 사용 (2)
SELECT DISTINCT city FROM STATION
WHERE REGEXP_LIKE(city, '^[^aeiou]', 'i') 
OR REGEXP_LIKE(city, '[^aeiou]$', 'i')

# RLIKE 사용 (REGEXP 사용도 가능)
SELECT DISTINCT city FROM STATION
WHERE city NOT RLIKE('^[aeiou]')
OR city NOT RLIKE('[aeiou]$')

 

첫번째 풀이는 지금까지 사용한 REGEXP_LIKE 함수를 사용했습니다. OR 조건을 넣기 위해 OR 표시(|)를 정규표현식 중간에 넣어주었습니다. 두번째 풀이는 OR 키워드를 명시적으로 넣어 두 정규표현식을 구분해서 작성했습니다. 세번째 풀이는 RLIKE 함수를 사용했는데요, RLIKE 함수와 REGEXP 함수는 모두 REGEXP_LIKE 함수와 거의 동일한 기능을 할 수 있는 함수입니다. 각 함수의 차이점에 대해서는 아래 포스팅에서 자세히 확인할 수 있습니다.

2024.05.20 - [데이터 분석/SQL] - [SQL] MySQL 정규 표현식 사용법 (REGEXP, REGEXP_LIKE 차이점)

 

[SQL] MySQL 정규 표현식 사용법 (REGEXP, REGEXP_LIKE 차이점)

SELECT p_nameFROM productsWHERE REGEXP_LIKE(p_name, '^[0-9]')정규표현식(Regular Expression)을 활용하면 다양한 텍스트 패턴을 매칭하는데 아주 효과적입니다. MySQL에서도 정규표현식을 활용할 수 있도록 함수를

onemorepatty.tistory.com

 

 

문제: Weather Observation Station 12

문제링크: https://www.hackerrank.com/challenges/weather-observation-station-12/problem

 

Weather Observation Station 12 | HackerRank

Query an alphabetically ordered list of CITY names not starting and ending with vowels.

www.hackerrank.com

Query the list of CITY names from STATION that do not start with vowels and do not end with vowels. Your result cannot contain duplicates.

 

Weather Observation Station 정규표현식 문제 시리즈의 마지막 문제입니다. 11번 문제와 모두 동일하며, OR 조건 대신 AND 조건을 사용해서 모음으로 시작하지도 끝나지도 않는 도시명(중복제거)을 출력하는 문제네요. 아래와 같이 정답 작성이 가능합니다.

 

SELECT DISTINCT city FROM STATION
WHERE REGEXP_LIKE(city, '^[^aeiou].*[^aeiou]$', 'i')

 

여기서 주목할만한 점은 11번 문제에서는 OR 조건을 정규표현식 내에 적용하기 위해 ' | ' 표시를 사용했는데, AND 조건의 경우 특별히 지정된 기호가 없다는 점입니다. 따라서 여기에서는 .* (임의의 문자가 0회 이상 들어간다는 뜻) 기호를 두 조건 사이에 넣어주었습니다.

 

 

이상으로 HackerRank SQL 문제 중 정규표현식과 관련된 기본적인 문제들을 모두 풀어보았습니다.

 

 

HackerRank 모든 문제 풀이 모음 바로가기

 

정확하고 꼼꼼하게 씁니다

마케팅, 데이터, 프로덕트, 스타트업, 일상, 유용한 정보 등에 대해 씁니다.

onemorepatty.tistory.com

모든 SQL 코딩테스트 문제 풀이 모음 바로가기

 

정확하고 꼼꼼하게 씁니다

마케팅, 데이터, 프로덕트, 스타트업, 일상, 유용한 정보 등에 대해 씁니다.

onemorepatty.tistory.com

 

반응형