문제 출처 : https://www.hackerrank.com/challenges/weather-observation-station-11/problem
풀이 매크로
1. 문제 정의 별도로 필요하지 않음
2. 요구사항 정리
- City의 첫글자나 마지막 글자에 알파벳 자음이 들어가선 안됨
- 결과 City값이 중복되선 안됨
코드 작성
SELECT DISTINCT city
FROM STATION
WHERE (LOWER(SUBSTR(city,1,1)) NOT IN ('a','i','e','o','u'))
OR (LOWER(SUBSTR(city,-1)) NOT IN ('a','i','e','o','u'))
SUBSTR(City,1,1)은 첫 글자를 의미하며 LEFT(city,1)와 결과가 동일하므로 이 코드에서도 대체해서 사용할 수 있다.
SUBSTR( City,-1은 마지막 글자를 의미하며 RIGHT(city,1)와 결과가 동일하므로 이 코드에서도 대체해서 사용할 수 있다.
다른 풀이
SELECT DISTINCT city
FROM STATION
WHERE (LOWER(SUBSTR(city,1,1)) NOT REGEXP('a|i|e|o|u'))
OR (LOWER(SUBSTR(city,-1)) NOT REGEXP('a|i|e|o|u'))
IN을 안쓰고 REGEXP를 이용해도 같은 결과가 나온다.
새로 배운 내용
1. WHERE 문에는 AS문으로 새로 만든 변수 사용불가함
2. WHERE문에 (조건식1,조건식2) NOT IN (알파벳) 이형태는 먹히지 않음.
3. Like 문을 쓰려면 변수명 LIKE 'a%' OR 변수명 LIKE 'i%'... 이렇게 다 써줘야 함
4. 끝 글자와 마지막 글자를 가져올때 각각 LEFT함수와 RIGHT함수를 써도 됨
5. IN 대신에 REGEXP로 대체가 가능함
6. MYSQL은 다른 SQL과 특이하게 대/소문자 구별없이 문자열 특정이 가능하다(LOWER 함수를 위에서 제거해도 정답이된다.)
'SQL > 코딩테스트' 카테고리의 다른 글
[MySQL] SQL 문제에서 문제정의방법 (1) | 2024.11.08 |
---|---|
[MySQL] TRUNCATE와 WHERE 조건 범위 (0) | 2024.11.08 |
[MySQL] INNER JOIN과 LEFT JOIN 쓰임 / COUNT(DISTINCT) (0) | 2024.11.07 |
[MySQL] 대칭 쌍 문제(Symmetric Pairs) (0) | 2024.11.06 |
[MySQL] Self join을 활용한 코딩테스트 주의사항 (0) | 2024.11.05 |