https://www.acmicpc.net/problem/2143 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 처음에 n개의 숫자가 나오고 m개의 숫자가 나오는데 거기 있는 것들의 합으로 t를 만드는게 목표이다. 이 문제를 보고 뭔가 동전들로 금액맞추기가 떠올랐다. 처음에 Nlist, Mlist를 받으면 거기서 가능한 모든 조합을 정리하고 값들을 dict으로 만들어 주었다. 왜냐하면 시간복잡도가 O(1)이기에 for문을 두번돌..
우리가 생각해야하는것은 1. 가입자를 늘리자. 2. 그중 판매액은 최대로 우선 이모티콘의 최대개수는 7개이고 할인율은 4개이다. 그래서 4의7승의 경우의수가 나오고 인원은 최대 100명이므로 곱해보면 1,600,000대략번의 횟수가 나오기에 완전탐색 가능하다고 생각을 하였다. 그렇다면 중복순열을 일일이 구현해야할까? 라고 의문점이 들었다 왜냐면 파이썬은 앵간한건 구현이 되어있기 때문이다. 찾아보니 product라고 중복순열을 만들어주는 모듈이 있엇다. 그래서 바로 냠냠! 할인율로 조합될수 있는 모든 경우의 수를 구해주고 첫번째의 경우의수부터 끝의 경우의수까지 루프를 돌면서 유저가 가지고 있는 정보들가 비교해서 제일 많이 구독시킬수 있는 경우에서 가장 total_price가 많은 경우를 answer에 갱신..
1. 첫 풀이 def solution(k, tangerine): erasedual = list(set(tangerine)) countarr = [] answer = 0 for i in erasedual: #시간복잡도 n제곱 여기서 줄여야겟네? a = tangerine.count(i) countarr.append(a) countarr.sort(reverse=True) #시간복잡도 nlogn for j in countarr: k -= j answer=1 if(k