def greedy_search(distance, cur_pos, moves, change_count):
if moves >= len(distance): return
change_at_current = distance[cur_pos]
distance[cur_pos] = 0
if sum(distance) == 0:
answer.append(moves + change_count + change_at_current)
greedy_search(distance.copy(), cur_pos + 1, moves + 1, change_count + change_at_current)
greedy_search(distance.copy(), cur_pos - 1, moves + 1, change_count + change_at_current)
def solution(name):
global answer
answer = []
distance = [min(ord(char) - ord('A'), 26 - (ord(char) - ord('A'))) for char in name]
greedy_search(distance, 0, 0, 0)
return min(answer)
def solution(phoneBook):
phoneBook.sort()
for p1, p2 in zip(phoneBook, phoneBook[1:]):
if p2.startswith(p1):
return False
return True
from collections import Counter
from functools import reduce
from operator import mul
def solution(clothes) :
closet = Counter(kind for name, kind in clothes)
total_case = reduce(mul, [c + 1 for c in closet.values()], 1) - 1
return total_case
from collections import Counter
from itertools import combinations
def solution(orders, course) :
result = []
for course_num in course :
counter = Counter()
for order in orders:
counter += Counter(combinations(sorted(order), course_num))
counter = counter.most_common()
result.extend(''.join(key) for key, val in counter if val > 1 and val == counter[0][1])
return sorted(result)
from collections import deque
def solution(people, limit):
people = deque(sorted(people))
answer = 0
while people :
first = people.pop()
if people and first + people[0] <= limit :
people.popleft()
answer += 1
return answer
def solution(numbers):
str_numbers = list(map(str, numbers))
str_numbers.sort(key=lambda x: x*3, reverse=True)
result = ''.join(str_numbers)
return str(int(result))
def solution(citations):
citations.sort(reverse = True)
for i, citation in enumerate(citations) :
if citation <= i :
return i
return len(citations)
def solution(priorities, location):
files = [[i, priority] for i, priority in enumerate(priorities)]
answer = []
while files :
idx, priority = files.pop(0)
if not files or priority >= max(x[1] for x in files) :
answer.append(idx)
else :
files.append((idx, priority))
return answer.index(location)+1
def solution(prices):
n = len(prices)
answer = [n - 1 - idx for idx in range(n)]
stack = []
for i, price in enumerate(prices):
while stack and price < prices[stack[-1]]:
top = stack.pop()
answer[top] = i - top
stack.append(i)
return answer
import re
def solution(skill, skill_trees):
answer = 0
for skill_tree in skill_trees :
core_skill = re.sub('[^'+skill+']', '', skill_tree)
answer += 1 if core_skill == skill[:len(core_skill)] else 0
return answer