728x90

https://school.programmers.co.kr/learn/courses/30/lessons/176962

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

from collections import deque


def solution(plans):
    answer = []

    plans = sorted(plans, key=lambda x: x[1])
    for i in range(len(plans)):
        a, b = plans[i][1].split(':')
        plans[i][1] = int(a) * 60 + int(b)

    num = len(plans)
    waitRoom = deque()

    print(plans)
    while len(answer) != num:
        if len(plans) > 0:
            stone = plans.pop(0)
            if len(plans) == 0:
                answer.append(stone[0])
            else:
                if stone[1] + int(stone[2]) <= plans[0][1]:
                    answer.append(stone[0])
                else:
                    waitRoom.append(stone[0])
        else:
            answer.append(waitRoom.pop())

    print(answer)

    return answer

이 세문제만 맞추고 나머진 죄다 실패....

 

누가 반례를 찾아주세요...

아마 stone[1]이랑 plans[0][1]사이의 텀이 길 때, waitRoom에 있는 시간을 고려해서 answer에 붙여야하는것 같다.

 

from collections import deque


def solution(plans):
    answer = []

    plans = sorted(plans, key=lambda x: x[1])
    for i in range(len(plans)):
        a, b = plans[i][1].split(':')
        plans[i][1] = int(a) * 60 + int(b)

    num = len(plans)
    waitRoom = deque()

    print(plans)
    while len(answer) != num:
        if len(plans) > 0:
            stone = plans.pop(0)
            if len(plans) == 0:
                answer.append(stone[0])
            else:
                if stone[1] + int(stone[2]) <= plans[0][1]:
                    answer.append(stone[0])
                    if len(waitRoom) > 0:
                        if plans[0][1] - (stone[1] + int(stone[2])) >= waitRoom[len(waitRoom)-1][1]:
                            while waitRoom[len(waitRoom)-1][1] <= plans[0][1] - (stone[1] + int(stone[2])):
                                name = waitRoom.pop()
                                answer.append(name[0])
                else:
                    # 대기열에 넣을 이름, 남은 시간
                    waitRoom.append([stone[0], int(stone[2]) - (plans[0][1] - stone[1])])
        else:
            if len(waitRoom) > 0:
                name = waitRoom.pop()
                answer.append(name[0])

    print(answer)

    return answer

 

아까보단 좀 더 맞았다..런타임 오류라..

728x90

'Algorithm > Programmers' 카테고리의 다른 글

Lv.1 공원 산책  (0) 2023.11.05
Lv1.추억 점수  (0) 2023.11.05
프로그래머스 Lv2. 호텔 대실 - 파이썬  (0) 2023.08.12
프로그래머스 괄호변환 - python  (0) 2021.03.13

+ Recent posts