티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/72412
시간복잡도를 맞추기 어려운 문제입니다.
info정보를 dictionary에 저장 후 조건에 맞게 불러서 count해주면 됩니다.
이때 시간복잡도를 맞추기 위해
1. target보다 큰 숫자들의 갯수를 샐 때 이진검색을 이용했고
2. 정렬을 검색할때마다 하지 않고 info에서 저장할 때 미리 해줬습니다.
def is_last_element(info):
return len(info) == 2
def save(dic, info):
if len(info) == 0:
return
if info[0] in dic:
if is_last_element(info):
dic[info[0]].append(int(info[1]))
dic[info[0]] = sorted(dic[info[0]])
else:
save(dic[info[0]], info[1:])
else:
if is_last_element(info):
dic[info[0]] = [int(info[1])]
else:
dic[info[0]] = {}
save(dic[info[0]], info[1:])
def select(dic, info):
if len(info) == 1:
info = info[0].split()
if info[0] == '-':
answer = 0
for k in dic.keys():
answer += find_answer(dic[k], int(info[1]))
return answer
if info[0] in dic:
return find_answer(dic[info[0]], int(info[1]))
return 0
if info[0] == '-':
answer = 0
for k in dic.keys():
answer += select(dic[k], info[1:])
return answer
if info[0] in dic:
return select(dic[info[0]], info[1:])
return 0
def binary_serach(arr, target, start, end):
mid = 0
while start <= end:
mid = (start+end)//2
if arr[mid] >= target:
end = mid-1
else:
start = mid + 1
return len(arr)- mid - (1 if arr[mid] < target else 0)
def find_answer(arr, target):
return binary_serach(arr, target, 0, len(arr)-1)
def solution(info, query):
answer = []
dic = {}
for i in info:
save(dic, i.split(' '))
for q in query:
answer.append(select(dic, q.split(' and ')))
return answer
'ALGORITHM > Programmers' 카테고리의 다른 글
[프로그래머스] 징검다리 건너기.py (0) | 2022.05.07 |
---|---|
[프로그래머스] 신고 결과 받기.py (0) | 2022.01.23 |
[프로그래머스] 정수 삼각형.py (0) | 2022.01.09 |
프로그래머스 큰 수 만들기.py (0) | 2021.12.05 |
[프로그래머스] 프렌즈4블록.py (0) | 2021.11.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gunicorn
- for-else
- conTeXt
- 프로그래머스
- 백준
- sql lite
- go context
- dfs
- go
- django
- 문자열 뒤집기
- 방금그곡
- 파이썬
- leetcode
- Two Scoops of Django
- 의대 신경학 강의
- 독후감
- stdout
- 팰린드롬수
- taggit
- query
- ManyToMany
- 소프트웨어 장인
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함