본문 바로가기

Study/SQL

HackerRank | 정규표현식 | weather observation station 6 ~ 11

weather observation station 6 문제는 아래와 같다.

 

Query the list of CITY names starting with vowels (i.e., a, e, i, o, or u) from STATION. Your result cannot contain duplicates.

Input Format

The STATION table is described as follows:


위 문제를 SQL기본 문법들을 활용하여 풀이하면, 

  1. 우선 중복을 제거한 city 이름 중,
  2. a/e/i/o/u로 시작하는 city 들만 출력한다.
SELECT DISTINCT city
FROM Station
WHERE city LIKE 'a%'
	OR city LIKE 'e%'
    OR city LIKE 'i%'
    OR city LIKE 'o%'
    OR city LIKE 'u%'

위 정답 코드를 정규식을 사용하면 조건문을 한 줄로 줄여 작성할 수 있다.

SELECT DISTINCT city
FROM Station
WHERE city REGEXP '^[aeiou].*'
  • REGEXP 는 정규표현식을 사용한다는 예약어이다.
  • []대괄호 안의 문자들 중 한 개의 문자와 매치한다.
  • ^ 는 뒤의 문자열로 문자가 시작한다.
  • . 는 한 개의 임의의 문자를 나타낸다.
  • 는 앞의 문자가 0개 이상으로 존재할 수 있다.
  • .*% 와 같은 역할을 수행한다.

즉 정규표현식을 통해 [aeiou] 중 하나와 매치되고, 뒤의 문자는 임의의 문자로 문자 갯수와 상관없이 city 이름이 출력된다.


weather observation station 7 문제는 

Query the list of CITY names ending with vowels (a, e, i, o, u) from STATION. Your result cannot contain duplicates.

앞선 문제와 반대로 a/e/i/o/u로 끝나는 city 들만 출력한다.

SELECT DISTINCT city
FROM Station
WHERE city REGEXP '.*[aeiou]$'

구성은 앞선 문제와 비슷하다.  .*을 앞에 놓고 끝나는 문자를 설정하여 코드를 작성한다.

  • $ 는 앞의 문자열로 문자가 끝난다.

weather observation station 8번 문제는 6번과 7번 조건을 함께 수행하는 문제이다.

Query the list of CITY names from STATION which have vowels (i.e., aeio, and u) as both their first and last characters. Your result cannot contain duplicates.

SELECT DISTINCT city
FROM Station
WHERE city REGEXP '^[aeiou].*[aeiou]$'

이 때는 시작하는 문자를 설정해주고, 중간에 .*, 끝나는 문자를 설정해주어 코드를 작성할 수 있다. 


weather observation station 9번 문제는

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

6번 문제의 조건을 부정하는 문제이다.

SELECT DISTINCT city
FROM Station
WHERE city NOT REGEXP '^[aeiou].*'
  • REGEXP 앞에 NOT을 붙이면 해당 표현식의 부정 조건을 설정할 수 있다.

10번과 11번 문제는 위 설명을 통해 충분히 풀이가 가능하니 실습해볼 것을 권장한다.

 

이 외에도 자세한 정규식 표현은 아래 사이트를 통해 확인할 수 있다.