Algorithm

Google Kick Start(Round A 2020)

Gauss1 2020. 3. 23. 00:17

1. Allocation

오름차순으로 정렬한 뒤 돈이 부족할때 까지 산다.

 

- 시간 복잡도

sorting part : O(NlogN) => Counting sort로 O(N)으로 단축 시킬 수 있음

processing part: O(N)

=> 총 O(N)

2. Plates

Dynamic programming 이용

첫 N stack에서 P개를 뽑아 만들수 있는 maximum sum을 dp[N][P]라고 하면

dp[i][j] = max(dp[i][j],sum[i][x]+dp[i-1][j-x])

 

for i [1,N]:

  for j [0,P]:

    dp[i][j] =0

    for x [0,min(j,K]:

       dp[i][j] = max (dp[i][j],sum[i][x]+dp[i-1][j-x])

 

- 시간 복잡도

O(N*P*K)

3. Workout

initial difference: di

maximum difference after inserting: dopt

trainning need to insert between the difference to make optimal: ceiling(di/dopt)-1 => ki

ksum = k1+k2+...+k(n-1) < K

 

1<dopt<max(di)

 

binary search로 dopt를 찾음

 

- 시간 복잡도

processing part: O(N) => 하나씩 돌면서 나누기

max(di)<10^9 이므로

O(log(10^9)*N)

 

4. Bundling

각 prefix의 기여도의 합산을 높이는게 목적

Pi: prefix of S strings

 

'Algorithm' 카테고리의 다른 글

Trie  (0) 2020.03.23
Counting Sort  (0) 2020.03.23
Huffman Coding (Compression Algorithm)  (0) 2020.02.03