Algorithm/1일 1코테

[💕 프로그래머스 Python] 프린터

대인보우 2020. 10. 25. 18:50
반응형

프로그래머스 연습문제 2단계

 🖨프린터🖨


문제 및 문제 설명

programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

내가 쓴 답

def solution(priorities, location):

    p = priorities #편의를 위해 p로 재정의
    answer = [] # 1차
    words = [] # 2차
    
    for i, v in enumerate(p): # 인덱스가 필요하기 때문에 index와 함께 값을 answer에 append
        answer.append([i,v])
    
    while answer:
        paper = answer.pop(0) #answer의 첫번째 값을 꺼내서 
        
        if len(answer) == 0: # pop 했는데 0이면 밑에 for문이 안돌아가서 따로 append
            words.append(paper)

        for i in range(len(answer)): 
            if paper[1] < answer[i][1]: #만약 answer 안에 더 큰 값이 있으면
                answer.append(paper) # 맨 뒤로 다시 append
                break
            elif i+1 == len(answer): # 아니면 끝까지 돌렸는데도 break가 안됐으면 words에 append
                words.append(paper) # (더 큰 값이 없다는 뜻이므로)
    
    for i in range(len(words)): # words에서 location 값을 찾아서 위치 return (인덱스 값보다 +1)
        if words[i][0] == location:
            return i+1

ㅎㅎ 코드 완전 더럽 

 

다른사람 코드

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)] # 인덱스와 함께 append 
    
    answer = 0
    while True:
        cur = queue.pop(0) # 맨 처음 값을 뽑되
        if any(cur[1] < q[1] for q in queue): # cur보다 더 큰 값이 하나라도 있으면
            queue.append(cur) # 다시 append
        else: # 아니면 없다는 뜻이므로
            answer += 1 # answer에 하나 + (내가 찾는 값에 하나씩 가까워진다고 생각하면 됨)
            if cur[0] == location:
                return answer

* any 사용예시

any(letter == 't' for letter in 'monty')

def solution(p, l):
    ans = 0
    m = max(p)
    while True:
        v = p.pop(0)
        if m == v:
            ans += 1 
            if l == 0:
                break
            else:
                l -= 1
            m = max(p)
        else:
            p.append(v)
            if l == 0:
                l = len(p)-1
            else:
                l -= 1
    return ans

 

반응형