본문 바로가기

학습 노트/알고리즘 (Python)

99클럽 - 롤케이크 자르기, 주차 요금 계산

롤케이크 자르기

 

프로그래머스

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

programmers.co.kr

아이디어

set과 dict를 사용해 전체 토핑의 종류를 계산할 수 있도록 구현했다.
주의해야 할 점은 '토핑의 가짓수'가 같아야 공평한 분배라고 정의하고 있다는 점이다.

풀이

def solution(topping):
    total_types_set = set(topping)
    total_types = len(total_types_set)

    left_frequency = {}
    right_frequency = {t: 0 for t in total_types_set}
    for t in topping:
        right_frequency[t] += 1
    
    left_types = 0
    right_types = total_types
    fair_cuts = 0

    for i in range(len(topping) - 1):
        current_topping = topping[i]
        
        if current_topping in left_frequency:
            left_frequency[current_topping] += 1
        else:
            left_frequency[current_topping] = 1
            left_types += 1
        
        right_frequency[current_topping] -= 1
        if right_frequency[current_topping] == 0:
            right_types -= 1
        
        if left_types == right_types:
            fair_cuts += 1

    return fair_cuts

 

주차 요금 계산

 

프로그래머스

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

programmers.co.kr

아이디어

데이터들은 dict를 사용해 데이터 접근, 탐색시의 소요 시간을 경계했다.
In과 out를 구분해 출입차를 관리하고, 또 하나의 dict를 만들어 차량별 누적 시간을 계산했다.
만약 out이 없다면 출차를 23:59로 일괄 지정하고, 이 상태로 요금을 계산한다.

풀이

def solution(fees, records):
    base_time, base_fee, unit_time, unit_fee = fees
    parking_records = {}
    total_time = {}
    
    def time_to_minutes(time_str):
        hh, mm = map(int, time_str.split(":"))
        return hh * 60 + mm
    
    for record in records:
        time_str, car_number, action = record.split()
        if action == "IN":
            if car_number not in parking_records:
                parking_records[car_number] = []
            parking_records[car_number].append(time_to_minutes(time_str))
        else:
            in_time = parking_records[car_number].pop()
            out_time = time_to_minutes(time_str)
            if car_number not in total_time:
                total_time[car_number] = 0
            total_time[car_number] += out_time - in_time
    
    end_of_day = time_to_minutes("23:59")
    for car_number, times in parking_records.items():
        if times:
            in_time = times.pop()
            if car_number not in total_time:
                total_time[car_number] = 0
            total_time[car_number] += end_of_day - in_time
    
    result = []
    for car_number in sorted(total_time):
        parking_time = total_time.get(car_number, 0)
        if parking_time <= base_time:
            fee = base_fee
        else:
            additional_units = (parking_time - base_time + unit_time - 1) // unit_time
            fee = base_fee + additional_units * unit_fee
        result.append(fee)
    
    return result

'학습 노트 > 알고리즘 (Python)' 카테고리의 다른 글

99클럽 - 진짜 공간  (0) 2024.04.27
99클럽 - 거리 두기 게임  (0) 2024.04.27
99클럽 - 역습  (0) 2024.04.26
99클럽 - 선택의 기로  (0) 2024.04.24
99클럽 - H-Index, 프로세스  (0) 2024.04.24