[SQL 코드카타]
Weather Observation Station 8
https://www.hackerrank.com/challenges/weather-observation-station-8/problem
1) 어떤 문제가 있었나
도시 이름의 시작과 끝 음절이 모음(a,e,i,o,u)인 도시 이름을 출력하는 문제
2) 내가 시도해본 건 무엇인가
시작 음절은 subtring으로, 마지막 음절은 like + % 를 활용하여 필터링
3) 어떻게 해결했나
select distinct CITY
from STATION
where substring(CITY, 1, 1) in ('a', 'e', 'i', 'o', 'u')
and( CITY like '%a'
or CITY like '%e'
or CITY like '%i'
or CITY like '%o'
or CITY like '%u')
4) 무엇을 새롭게 알았나
- regexp 함수를 활용해 정규식의 시작 규칙(^)과 끝 규칙($)으로 조건 설정 가능
- left, right, mid 함수로 문자열에 따라 음절 개수를 정할 수 있음
└ left(칼럼명, n): 문자열 왼쪽 방향 부터 n개 문자 추출
└ right(칼럼명, n): 문자열 오른쪽 방향 부터 n개 문자 추출
└ mid(칼럼명, m, n): 문자열 m번째 자릿수부터 n개 문자 추출
# regexp 함수 + 정규식
select distinct city
from STATION
where city REGEXP '^[a,e,i,o,u]'
and city REGEXP '[a,e,i,o,u]$';
# LEFT, RIGHT 함수
select distinct city
from station
where (left(city,1) in ('a','e','u','i','o'))
and (right(city,1) in ('a','e','u','i','o'));
[파이썬 코드카타]
문자열 다루기 기본
https://school.programmers.co.kr/learn/courses/30/lessons/12918
1) 어떤 문제가 있었나
주어진 문자열이 0-9까지 숫자로만 이뤄져 있으면 True, 영문 알파벳이 섞여 있으면 False를 반환하는 문제
2) 내가 시도해본 건 무엇인가
- a~z, A~Z까지 영문 알파벳을 모두 포함한 리스트 생성 후, s의 특정 문자열이 문자열에 속하면 False 반환 > 60점 오답
# 오답 코드
lower_list = [chr(x) for x in range(97, 123)]
upper_list = [chr(x) for x in range(65, 91)]
str_list = lower_list+ upper_list
def solution(s):
for i in range(len(s)):
if s[i] in str_list:
return False
else:
return True
- s를 int 함수로 감쌌을 때 오류가 발생하면 Fase, 아니면 True 반환 > 86.7점 오답
def solution(s):
try:
int(s)
return True
except:
return False
3) 어떻게 해결했나
- 프로그래머스 힌트 페이지를 통해서 [문자열 s의 길이가 4 혹은 6]이라는 조건이 누락됨을 확인
- 다른 사람 풀이를 통해 숫자인지 판별하는 isdecimal() / isdigit() / isnumeric() 함수 확인
def solution(s):
if (len(s) == 4 or len(s) == 6) and (s.isdecimal()):
return True
else:
return False
# 오류 케이스 있음
# len(s)가 4가 아닐 때 Ture/False가 아니라 6이 출력되기 때문
def solution(s):
if (len(s) == 4 or 6) and (s.isdecimal()):
return True
else:
return False
4) 무엇을 새롭게 알았나
- 문제를 풀 때 문제를 꼼꼼하게 읽는 습관이 중요!
- 주어진 문자열이 숫자인 판별하는 함수
└ isdecimal(): int형으로 변환이 가능하다면 True를 반환하는 함수
└ isdigit(): 단일 글자가 '숫자' 모양으로 생겼으면 True를 반환하는 함수
└ isnumeric(): 제곱근 및 분수, 거듭제곱 특수문자를 포함해 숫자값 표현에 해당한다면 True를 반환하는 함수
- 조건절에 변수를 명확하게 지정해야 함 (a - 오답, b는 정답)
s = "a23431"
a = len(s) == 4 or 6
b = len(s) == 4 or len(s) == 6
print(a) # 6
print(b) # True
'TIL' 카테고리의 다른 글
[240228] SQL: 코드카타 143~144 & 파이썬: 코드카타 38(map, index, strip) (4) | 2024.02.28 |
---|---|
[240227] SQL: 코드카타 141~142 & 파이썬: 코드카타 37 (1) | 2024.02.27 |
[240223] SQL: 코드카타 131 & 파이썬: 코드카타 35 (0) | 2024.02.23 |
[240223] 태블로(Tableau) - 매출 대시보드 만들기 (0) | 2024.02.23 |
[240222-23] 태블로(Tableau) - 대시보드 설계와 구성, 생성 (0) | 2024.02.23 |