1. pythonic

def cutTheSticks(arr):
    # Write your code here
    
    arr.sort(reverse = True)
    
    sticks_cut = []
    while arr:
        sticks_cut.append(len(arr))
        
        min_value = arr.pop()
        while arr and min_value == arr[-1]:
            arr.pop()
            
    return sticks_cut

2. 구식

def cutTheSticks(arr):
    # Write your code here
    
    sticks_cut = []
    while len(arr) > 1:
        cutoff = min(arr)
        sticks_cut.append(len(arr))
        
        arr = [num - cutoff for num in arr]
        temp_arr = []
        
        for num in arr:
            if not num:
                continue
            temp_arr.append(num)
            
        arr = temp_arr
        
    if len(arr) == 1:
        sticks_cut.append(1)
        
    return sticks_cut

 

def libraryFine(d1, m1, y1, d2, m2, y2):
    # Write your code here
    fine = 0
    
    if y1 <= y2 and m1 <= m2 and d1 <= d2:
        return fine
    else:
        if y1 == y2 and m1 == m2 and d1 >= d2:
            d_diff = d1 - d2
            fine += (15 * d_diff)
        elif y1 == y2 and m1 >= m2:
            m_diff = m1 - m2
            fine += (500 * m_diff)
        elif y1 >= y2:
            y_diff = y1 - y2
            fine += (10000 * y_diff)
        
    return fine
def squares(a, b):
    # Write your code here
    a = math.ceil(math.sqrt(a))
    b = math.floor(math.sqrt(b)) + 1
    
    return b - a
def appendAndDelete(s, t, k):
    # Write your code here
    cnt = 0
    for a, b in zip(s, t):
        if a != b:
            break
        cnt += 1
    
    s = s[cnt:]
    t = t[cnt:]
    
    sl = len(s)
    tl = len(t)
    
    # 경우가 맞는건지 모르겠다.
    # 1. 횟수와 move 횟수가 같은 경우
    # 2. 이동 횟수가 k 이하이면서 짝수배인 경우(문자열이 2개니까 행동도 2번씩, 홀수면 안됨)
    # 3. 전체 행동 횟수가 k보다 낮은 경우
    if (k == sl + tl) or ((k - sl + tl) % 2 == 0 and k >= sl + tl) or (k >= cnt*2 + sl + tl):
        return 'Yes'
    else:
        return 'No'
def findDigits(n):
    # Write your code here
    cnt = 0
    for i in str(n):
        i = int(i)
        if i == 0:
            continue
        else:
            if n % i == 0:
                cnt += 1
                
    return cnt
def jumpingOnClouds(c, k):
    e = 100    # 에너지
    n = len(c)
    s = 0      # 시작은 0부터
    while True:
        s = (s + k) % n    # jump
        e -= (c[s] * 2) + 1 # thundercloud면 2가 추가로 감소
        
        # 시작점(0)으로 다시 되돌아가면 게임이 끝남
        if not s:
            break
        
    return e
def permutationEquation(p):
    # Write your code here
    result = [0] * len(p)
    
    for n in p:
        next_ = p[n - 1]
        next__ = p[next_ - 1]
        result[next__ - 1] = n
        
    return result

 

def circularArrayRotation(a, k, queries):
    # Write your code here
    n = len(a)
    result = [0] * n
    
    # 해당 자리에서 k만큼 이동시켜주고, 회전(n)
    for i in range(n):
        result[(i + k) % n] = a[i]
        
    return [result[q] for q in queries]
    
    
# 아래는 바로 결괏값(참고함)
# n-k로 테이블 돌려서 기준 맞춰주고, q만큼 이동, 회전이므로 % n
def circularArrayRotation(a, k, queries):
    # Write your code here
    result = []
    n = len(a)
    
    for q in queries:
        result.append(a[(n - k + q) % n])
        
    return result
# n으로 나눠주는 이유는 [5, 4, 3]인 경우를 생각
def saveThePrisoner(n, m, s):
    # Write your code here
    result = (m - 1 + s) % n
    
    return n if not result else result
def viralAdvertising(n):
    # Write your code here
    cum = 0
    
    shared = 5
    for i in range(n):
        liked = shared // 2
        cum += liked
        
        shared = liked * 3
        
    return cum