https://www.hackerrank.com/challenges/weather-observation-station-8/problem?isFullScreen=true
select distinct CITY from STATION
where CITY regexp '^[aeiou]$'
정규표현식을 배운지 며칠이 지나고 가물가물했다.
^와 $는 기억났지만, 문자열을 가두는 게 ()였는지, ''였는지 까먹었다.
심지어 regexp를 써야하는지, regex를 써야하는지도 헷깔렸다.
hackerrank에서는 regexp에 색칠도 안 해줘서 더 답답했다.
그래도 일단 풀긴해야하니까 검색을 했다.
역시나 document는 한 눈에 알아보기 힘들었다.
일단은 알고있는 지식으로 https://regexr.com/
에서 파봤다.
그래도 모르겠어서 hackerrank의 discussions를 봤는데, 역시나 답안이 있었다.
문자열을 가두는 [], 아무문자., 앞 문자의 n회*, 정규표현식의 시작과 끝을 알리는''
간단하지만 찾아보지 않았다면 정~~~말 오래 걸렸을 만한 것들이다.
select distinct CITY from STATION
where CITY regexp '^[aeiouAEIOU].*[aeiouAEIOU]$'
백준 : https://www.acmicpc.net/problem/1920
내 코드 : https://github.com/hjn5018/sparta_github/blob/main/acmicpc/%EC%88%98%EC%B0%BE%EA%B8%B0.py
1시간 정도 싸맨 것 같다.
n_list_num = int(input())
n_list = list(map(int, input().split()))
m_list_num = int(input())
m_list = list(map(int, input().split()))
for num in m_list:
if num in n_list:
print(1)
else:
print(0)
# 1
# 1
# 0
# 0
# 1
처음은 가뿐하게 시간초과로 실패했다.
아마 O(n^2)정도 걸려서 그런 것 같다.
그래도 정답이 나와서 기분이 좋았다.
금방 풀 수 있을 것 같았다.
len_n_list = int(input()) # 입력 받기
n_list = list(map(int, input().split()))
len_m_list = int(input())
m_list = list(map(int, input().split()))
start = 0 # 이진탐색 준비 (start, end, mid)
end = len_n_list - 1
mid = (start + end) // 2
n_list.sort() # 이진탐색 전 정렬
for target in m_list: # 이진탐색 시작
while start < end: # 여기가 좀 문젠데..
if n_list[mid] < target:
start = mid + 1
mid = (start + end) // 2
elif n_list[mid] > target:
end = mid - 1
mid = (start + end) // 2
else: # n_list(mid) == target
print(1)
break
print(0)
# 5
# 4 1 5 2 3
# 5
# 1 3 7 9 5
# 1
# 0
# 0
# 0
# 0
# 0
최댓값 문제를 거치면서 input에는 조금 익숙해졌다.
감으로 대강 때려넣고 코드를 작성해봤다.
틀린 코드이지만, 여기까지 작성하는데도 시간이 오래 걸렸다.
처음에는 end에 max(list)를 넣으려고 했다.
어제 공부방에서 들었던 풀이가 생각났기 때문이다.
대강의 이진 코드를 구상하는데 진~~~짜 시간이 오래 걸렸다.
나름의 테스트케이스를 떠올리는 것도 힘들었고, 변수명을 어떻게 할지,
반복을 돌리긴 하는데, for문 한 번만 돌리면 되는건지
모두가 모호했다.
그래도 구상하고 작성하면서 내 목적을 확실히 할 수 있었다.
이진탐색 반복과 분기 작성에 매몰돼서
제일 중요한 사전 준비인 정렬을 잊고 있었는데,
작성해놓은 코드를 하나씩 읽어가면서 깨달을 수 있었다.
# ============두 번째 시도에서는 start end mid를 초기화하지 않아서 제대로 안 된 듯.=====================================
len_n_list = int(input()) # 입력 받기
n_list = list(map(int, input().split()))
len_m_list = int(input())
m_list = list(map(int, input().split()))
n_list.sort() # 이진탐색 전 정렬
for target in m_list: # 이진탐색 시작
start = 0 # 이진탐색 준비 (start, end, mid)
end = len_n_list - 1
mid = (start + end) // 2
while start < end: # 여기가 좀 문젠데..
if n_list[mid] < target:
start = mid + 1
mid = (start + end) // 2
elif n_list[mid] > target:
end = mid - 1
mid = (start + end) // 2
else: # n_list(mid) == target
print(1)
break
print(0) # 여기도 좀?? 위치가..?
# 1
# 0
# 1
# 0
# 0
# 0
# 0
...
아직 n번째 시도 중이다..............
