20200630 programmers print

2020. 6. 30. 02:45개발/알고리즘

def max_count(priorities):
    max_num = 0
    max_idx = 0
    length = len(priorities)
    for i in range(length):
        if priorities[i] > max_num:
            max_num = priorities[i]
            max_idx = i
    return max_num, max_idx
def solution(priorities, location):
    answer = 0
    while True:
        max_num, max_idx = max_count(priorities)
        if location > max_idx:
            priorities = priorities[max_idx+1:] + priorities[:max_idx]
            location = location - max_idx - 1
            answer += 1
            continue
        elif location < max_idx:
            priorities = priorities[max_idx+1:] + priorities[:max_idx]
            location = len(priorities) + location - max_idx
            answer += 1
            continue
        else:
            answer += 1
            break
        
    return answer

옛날에 생각했었던 풀이는 아래와 같다.

def solution(priorities, location):
    cnt = 0
    answer = 0
    cycle = 0
    finished = 0
    while finished == 0:
        if priorities[0] == max(priorities):
            answer += 1
            priorities.pop(0)
            if cnt == location + cycle:
                finished = 1
            cnt += 1
        else:
            priorities.append(priorities.pop(0))
            if cnt == location + cycle:
                cycle += len(priorities)
            cnt += 1
        
    return answer