def solution(number):
answer = 0
for i in range(len(number)):
for j in range(i + 1, len(number)):
for k in range(j + 1, len(number)):
if number[i] + number[j] + number[k] == 0:
answer += 1
return answer
슬라이딩 윈도우(혹은 투포인터), 맵 자료구조의 개념을 알면 쉽게 풀 수 있는 문제입니다.
가입한 날로부터 10일간 할인을 받을 수 있는 것을 이용해 1~10일동안 살 수 있는 품목을 카운팅합니다.
만약 2~11일 동안 살 수 있는 품목이 궁금하다면, 10일간을 전부 찾을게 아니라 카운팅한 값에서 1일의 할인상품을 빼주고, 11일의 할인상품을 더해주면 됩니다.
우리가 원하는 상품목록이 있기 때문에 그 상품들만 찾아주면 되고 카운팅과 범위 처리는 예외가 나지 않도록 적당히 잘 해주면 됩니다. (설명이 좀 그런데 정말 적당히 잘 하면 됩니다. ㅋㅋ;;)
def solution(want, number, discount) -> int:
answer = 0
product = {}
idx = 0
for w in want:
product[w] = idx
idx += 1
for i in range(10):
if discount[i] in product:
number[product[discount[i]]] -= 1
for i in range(len(discount)):
if checklist(number):
answer += 1
if discount[i] in product:
number[product[discount[i]]] += 1
if i + 10 < len(discount) and discount[i + 10] in product:
number[product[discount[i + 10]]] -= 1
return answer
def checklist(number) -> bool:
for n in number:
if n > 0:
return False
return True
어떤 숫자 i에 대해 X와 Y 중에 나온 수가 적은 값을 취합니다. (더 많은쪽은 짝을 이루지 못하고 남습니다.)
숫자 i를 짝이 이루어진 수 만큼 배열에 넣고 내림차순으로 정렬하면 정답이 됩니다.
단, 배열의 길이가 0이라면 "-1"을, 배열의 길이가 0의 갯수와 같다면 (즉 0 말고 다른 수가 배열 안에 없다면) "0"을 return하는 예외처리가 필요합니다.
def solution(X, Y):
numx = [0 for i in range(10)]
numy = [0 for i in range(10)]
answer = []
for n in X:
numx[int(n)] += 1
for n in Y:
numy[int(n)] += 1
pred = min(numx[0], numy[0])
for i in range(10):
n = min(numx[i], numy[i])
for j in range(n):
answer.append(str(i))
answer.sort(reverse=True)
if len(answer) == 0:
return "-1"
return ''.join(answer) if len(answer) > pred else "0"