이 문제는 문제 설명을 길지만 내용은 간단한 문제였다. 요약하자면 주차장에 입출고한 차량의 시간 / 차번호 / 입출고 여부 가 주어질 때, 각 차량 당 하루 주차요금을 계산하는 문제이다.
문제를 보면서 고민했던점은
1. 시간 계산을 어떤 식으로 할 것인가
2. 데이터를 어떤 컨테이너에 넣어서 요금계산을 할 것인가였다.
우선 나는 문제의 세부조건에서 '입고한 후, 출고 기록이 없다면 23:59에 출고된 것으로 한다' 부분과 TC에서 '입고-출고를 했던 차량이 다시 입고하는 경우'를 보고 아이디어를 떠올렸다.
1. 시간 계산 아이디어
- 우선 모든 차들은 max_time(23:59)을 쓴다고 가정하고, 입고되면 입고 시간만큼 빼고 출고되면 출고시간부터 23:59시까지 시간을 뺐다. 이렇게 하면 별다른 구현 없이 출고가 없는 차들은 23:59분에 출고된 것으로 구현할 수 있을 것 같았다.
- 계산의 편의를 위해 모든 시간은 분으로 계산하였다.
- 출고됐다가 다시 입고된 경우는 입고된 시간부터 23:59까지 시간을 다시 모두 넣어주고, 출고는 1과 동일하게 처리한다
2. 데이터 컨테이너
- 가장 먼저 떠오른 데이터는 딕셔너리였다. 차량번호를 키로, 이용시간(분)을 값으로 하여 저장하였다.
- 입력받은 배열을 돌면서 딕셔너리에 저장할 때, 처음 입고된 경우와 두 번째 입고된 이후로 분리할 필요가 있었는데 이를 try-except구문으로 구현하였다.
- 정답 조건이 차량 넘버를 기준으로 한 리스트 배열이었기 때문에 정렬 딕셔너리 리스트를 이용하여 답을 구하였다.
이를 구현한다면
이렇게 된다.
try-except구문을 이용하여 딕셔너리를 생성할 때 조건 분기를 해야 하는 번거로움을 줄일 수 있었다. 딕셔너리를 처음 활용할 때는 낯설고 분기가 많아져서 어려웠는데 어느덧 익숙해진 게 느껴져서 뿌듯한 문제였다.
오늘도 파이륑!
'알고리즘' 카테고리의 다른 글
[PROGRAMMERS] 월간 코드 챌린지 시즌1: 삼각 달팽이 Python (0) | 2022.05.18 |
---|---|
[PROGRAMMERS] 2021 Dev-Matching: 다단계 칫솔 판매 Python (0) | 2022.05.17 |
[PROGRAMMERS] 2017 팁스타운 : 예상 대진표 Python (0) | 2022.05.14 |
[SWEA] D4 : 길찾기 Python (0) | 2022.05.14 |
[SWEA] D4 : 장훈이의 높은 선반 (0) | 2022.05.12 |