롤케이크 자르기
아이디어
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
주차 요금 계산
아이디어
데이터들은 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 |