독감 걸리고 이틀 앓아누웠다..... 올해 들어 참 자주 아픈듯 코로나 때문에 면역력이 떨어졌나..
암튼 이제 정신 좀 차리고 코테 공부 다시 시작!!
import math
def solution(fees, records):
answer = []
car_info = {}
car_time = {}
# 입력 레코드 분리
for i in records:
# 출입시간, 차량번호, (in,out)여부 분리
time, car_num, state = i.split()
# 시간 분으로 처리
hour, minute = time.split(':')
now_time = int(hour)*60 + int(minute)
# In인 경우
if len(state) == 2:
# 차량 정보에 차량번호:입장시간 입력
car_info[car_num] = now_time
# Out인 경우
else:
# 주차 시간 기록
parking_time = now_time - car_info[car_num]
# 차량 번호 별 시간 기록에 해당 정보 기입
if car_num not in car_time:
car_time[car_num] = parking_time
else:
car_time[car_num] += parking_time
# Out 했으니 정보 지우기
del car_info[car_num]
# In만 한 경우
if car_info:
for car_num in car_info:
# 들어온 시간 확인
in_time = car_info[car_num]
# 차량 번호 별 시간 기록에 정보 기입 24시간 - 입장시간
if car_num not in car_time:
car_time[car_num] = (1439 - in_time)
else:
car_time[car_num] += (1439 - in_time)
# 차량 번호 별 시간 기록으로 요금 계산하기
for car_num in sorted(car_time.keys()):
# 총 시간은 차량 시간 디렉토리에 담긴 차량 번호로 확인
total_time = car_time[car_num]
pay = fees[1]
# 단위 시간보다 오래 걸린 경우
if total_time - fees[0] > 0:
leftover = total_time - fees[0]
# 추가요금 계산해서 answer에 append 해주기
pay += math.ceil(leftover/fees[2])*fees[3]
answer.append(pay)
return answer
< 풀이 과정 >
주어진 문제를 잘 읽고 구현해내는 문제. 해결하는데 시간이 좀 걸렸다
차량이 입차, 출차되는 정보를 담은 딕셔너리 car_info와 차량 번호판 기준으로 총 시간 정보를 담은 딕셔너리 car_time 2개를 생성하였다
records를 for문으로 돌려 입차든 출차든 현재 시간을 담은 now_time 생성, 이후 입차인 경우 car_info - 차량번호에 현재시간 기입, 출차인 경우 차량이 주차된 시간인 parking_time 변수생성하여 입차 기록이 있으면 +, 아니면 주차시간 저장. 출차 이후 car_info에서 해당 차량 번호 제거해주기
(이때 주차시간을 저장해주는 이유는 필요한 시간이 출차 시간이 아니기 때문!)
만일 입차기록만 있다면, 차량이 들어왔던 시간을 in_time으로 두고 출차 시간인 (23:59 - 입차한 시간)을 더해준다.
이후 차량 번호 마다 주차요금을 계산하기 위해 for문을 돌렸고 기본요금을 pay로 두었다.
이후 기본 시간보다 주차된 시간이 크면 pay에 초과 시간 / 단위 시간 * 단위 요금을 더해주어 answer로 출력!
차량 입출차 정보, 차량 번호 당 시간 이렇게 나누어서 생각을 해서 그런지 오래걸렸다.
좀 더 빠르게 문제를 풀 수 있는 접근 방식도 있을 듯!
def solution(record):
answer = []
user_id = {}
for array in record:
word = array.split()
if len(word) == 3:
user_id[word[1]] = word[2]
for array in record:
word = array.split()
if word[0] == 'Enter':
answer.append('%s님이 들어왔습니다.' %user_id[word[1]])
elif word[0] == 'Leave':
answer.append('%s님이 나갔습니다.' %user_id[word[1]])
return answer
< 풀이 과정 >
단순 구현하는 문제!
records 리스트에서 Leave인 경우를 제외한 Enter, Change의 경우 딕셔너리에 {id:닉네임}을 저장해준다. (Change로 시작을 해도 결국 딕셔너리라 최신 값만 저장 된다!)
answer = 0
def search(k, dungeons, count, visited):
global answer
if count > answer:
answer = count
for i in range(len(dungeons)):
if k >= dungeons[i][0] and not visited[i]:
visited[i] = True
search(k-dungeons[i][1], dungeons, count+1, visited)
visited[i] = False
def solution(k, dungeons):
global answer
visited = [False] * len(dungeons)
search(k, dungeons, 0, visited)
return answer
< 풀이 과정 >
탐색을 위해 새로운 함수를 정의해주었다. def search