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

 

프로그래머스

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

programmers.co.kr


1차 시도

방 번호를 key를 갖고 바로 다음 방 번호를 value로 두고 찾아보자는 생각으로 구현

def solution(k, room_number):
    room_dict = dict()
        
    for room in room_number:
        while room in room_dict.keys():
            room = room_dict[room]
        room_dict[room] = room + 1
    
    return list(room_dict.keys())

결과: 78.8

정확성만 통과

 

다른 사람 코드

import sys
sys.setrecursionlimit(1012)

def solution(k, room_number):
    room_dict = dict()
        
    for room in room_number:
        find_empty_room(room, room_dict)
            
    return list(room_dict.keys())

def find_empty_room(room_num, room_dict):
    if room_num not in room_dict.keys():
        room_dict[room_num] = room_num + 1
        return room_num
    empty_room = find_empty_room(room_dict[room_num], room_dict)
    room_dict[room_num] = empty_room + 1
    return empty_room

결과: 100

정확성과 효율성 모두 통과

 

1차 시도와 차이점

저의 코드는 value를 바로 다음 방 번호를 넣기 때문에 다음 가능한 방 번호를 찾을 때 어떠한 경우라도 1씩 증가시키면서 찾습니다.

다른 사람 코드는 value를 이전까지 찾았던 배정 가능한 빈 방 번호를 넣기 때문에 1씩 증가시키는 것보다 탐색 경로가 압축이 되기 때문에 더 빠르게 됩니다.

'프로그래머스-파이썬' 카테고리의 다른 글

쿠키 구입  (0) 2024.05.14
도둑질  (0) 2024.05.02
무지의 먹방 라이브  (0) 2024.04.09
테이블 해시 함수  (0) 2022.12.29
카드짝 맞추기  (0) 2022.11.30

+ Recent posts