반응형
프로그래머스 문제
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1차 풀이 (실패)
살짝 노가다 풀이
"""
주차 요금 계산하기
기본 시간 - 기본 요금 [180, 5000]
단위 시간 - 단위 요금 [10, 600]
출차된 내역이 없다면, 23:59에 출차된 것으로 간주한다
기본 시간이하라면, 기본 요금
기본 시간을 초과하면, 기본 요금에 더해서, 초과한 시간에 대해서 단위 시간 마다 단위 요금
"""
# 올림 가져오기
import math
def solution(fees, records):
answer = []
base_min = fees[0]
base_rate = fees[1]
plus_min = fees[2]
plus_rate = fees[3]
cars = []
time = []
histories = []
for i in records:
word = i.split(' ')
#리스트에 차가 없고 입차이면
if word[1] not in cars and word[2] == "IN":
cars.append(word[1])
# 시간을 분으로 바꾸기
H_M = word[0].split(':')
hour = int(H_M[0])
minute = int(H_M[1])
total_minute = (hour * 60) + minute
time.append(total_minute)
# 리스트에 차가 있고 출차이면
# 이미 들어와 있었는지 확인
# 차번호와 시간을 함께 저장 출력
elif word[1] in cars and word[2] == "OUT":
num = cars.index(word[1])
# 시간을 분으로 바꾸기
H_M = word[0].split(':')
hour = int(H_M[0])
minute = int(H_M[1])
total_minute = (hour * 60) + minute
parking_time = total_minute - time[num]
#print(parking_time, word[1])
# 지우기
del cars[num]
del time[num]
car = [word[1], parking_time]
# 공백일 경우
if not histories:
histories.append(car)
# 공백이 아닐 경우
else:
# 이미 입차 이력있다면
count = 0
for i in histories:
count+=1
if word[1] in i:
i[1] += parking_time
break
# 찾는데 없었다면
if count == len(histories):
histories.append(car)
# 리스트에 차가 있고 출차가 없으면
if cars:
for index in range(len(cars)):
#23:59 까지
last_min = 1439
parking_time = last_min - time[index]
car = [cars[index], parking_time]
count = 0
for i in histories:
count+=1
if cars[index] in i:
i[1] += parking_time
break
# 찾는데 없었다면
if count == len(histories):
histories.append(car)
# 차량 번호가 작은 순으로 만들기
#print(histories)
histories = sorted(histories, key=lambda x: x[0])
# 마지막 주차 계산
for j in histories:
# 기본 요금
if j[1] < base_min:
result = base_rate
# 기본 시간 초과할 경우
else:
# 올림해야됨
result = base_rate + math.ceil((j[1] - base_min) / plus_min) * plus_rate
answer.append(result)
return answer
테스트 케이스 1,3,8 번이 말썽이다
아래와 같은 테스트 케이스 추가해서 수정해보았다
입력값
[180, 5000, 10, 600]
["05:34 5961 IN", "06:34 5961 OUT", "07:34 5961 IN", "08:34 5961 OUT", "09:34 5961 IN", "10:34 5961 OUT", "11:34 5961 IN", "12:34 5961 OUT"]
위의 코드의 count 변수의 위치가 문제 였다
2차 풀이 (성공)
노가다로 풀었더니 성공했다!
그냥 열심히 하나하나 풀어가면 되는듯 하다
"""
주차 요금 계산하기
기본 시간 - 기본 요금 [180, 5000]
단위 시간 - 단위 요금 [10, 600]
출차된 내역이 없다면, 23:59에 출차된 것으로 간주한다
기본 시간이하라면, 기본 요금
기본 시간을 초과하면, 기본 요금에 더해서, 초과한 시간에 대해서 단위 시간 마다 단위 요금
"""
# 올림 가져오기
import math
def solution(fees, records):
answer = []
base_min = fees[0]
base_rate = fees[1]
plus_min = fees[2]
plus_rate = fees[3]
cars = []
time = []
histories = []
for i in records:
word = i.split(' ')
#리스트에 차가 없고 입차이면
if word[1] not in cars and word[2] == "IN":
cars.append(word[1])
# 시간을 분으로 바꾸기
H_M = word[0].split(':')
hour = int(H_M[0])
minute = int(H_M[1])
total_minute = (hour * 60) + minute
time.append(total_minute)
# 리스트에 차가 있고 출차이면
# 이미 들어와 있었는지 확인
# 차번호와 시간을 함께 저장 출력
elif word[1] in cars and word[2] == "OUT":
num = cars.index(word[1])
# 시간을 분으로 바꾸기
H_M = word[0].split(':')
hour = int(H_M[0])
minute = int(H_M[1])
total_minute = (hour * 60) + minute
parking_time = total_minute - time[num]
#print(parking_time, word[1])
# 지우기
del cars[num]
del time[num]
car = [word[1], parking_time]
# 공백일 경우
if not histories:
histories.append(car)
# 공백이 아닐 경우
else:
# 이미 입차 이력있다면
count = 0
for i in histories:
# 값 더하기
if word[1] in i:
i[1] += parking_time
break
count+=1
# 찾는데 없었다면
if count == len(histories):
print()
histories.append(car)
# 리스트에 차가 있고 출차가 없으면
if cars:
for index in range(len(cars)):
#23:59 까지
last_min = 1439
parking_time = last_min - time[index]
car = [cars[index], parking_time]
count = 0
for i in histories:
if cars[index] in i:
i[1] += parking_time
break
count+=1
# 찾는데 없었다면
if count == len(histories):
histories.append(car)
# 차량 번호가 작은 순으로 만들기
#print(histories)
histories = sorted(histories, key=lambda x: x[0])
# 마지막 주차 계산
for j in histories:
# 기본 요금
if j[1] < base_min:
result = base_rate
# 기본 시간 초과할 경우
else:
# 올림해야됨
result = base_rate + math.ceil((j[1] - base_min) / plus_min) * plus_rate
answer.append(result)
return answer
반응형
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 1] 키패드 누르기 (2020 카카오 인턴십) (0) | 2023.03.30 |
---|---|
[Python] [Level 2] 주식 가격 (아주 좋은 문제) (0) | 2023.03.28 |
[Python] [Level 1] 공원 산책 (프로그래머스 문제) (0) | 2023.03.26 |
[Python] [Level 1] 크기가 작은 부분 문자열 (0) | 2023.03.16 |
[Python] [Level 1] 대충 만든 자판 (enumerate 활용하기) (0) | 2023.03.15 |