반응형
프로그래머스 Level 2
호텔 대실 문제
https://school.programmers.co.kr/learn/courses/30/lessons/155651#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1차 풀이
왜 틀린지 모르겠다....
반례를 모르겠다!
"""
최소한 객실으로 예약손님 받기
예약시간 = book_time
10분 청소 필수
필요한 최소 객실의 수
"""
def solution(book_time):
answer = 0
room = []
# 특정 기준으로 정렬 (입장 시간 기준)
# sort와 lambda 함수 사용하기
book_time.sort(key = lambda x: x[0])
for i in range(len(book_time)):
check_in, check_out= book_time[i][0], book_time[i][1]
h, m =check_out.split(':')
m = int(m) + 10
check_out= h + ':' + str(m)
if room: # if list is not empty
#print(len(room))
count = 1
for j in range(len(room)):
if room[j] <= check_in:
#print("check out", room[j], "check in" ,check_in)
# update
room[j] = check_out
# break
else:
#print(count, len(room))
if count == len(room):
room.append(check_out)
else:
count += 1
print(room)
else: # if list is empty
room.append(check_out)
answer = len(room)
return answer
사실 틀린 이유를 계속 알고있었다
문자열 대소비교는 ascil 코드값으로 비교하기 때문에
근데 input의 데이터가 어차피 숫자의 문자열이기 때문에
대소 비교해도 가능하기 때문에 문제없었지만
50분이후에는 청소시간 10분이 붙기때문에 60분을 넘어버리기 때문에 문제가 생김
2차 풀이
그래서 그냥 **시**분을 모두 **분으로 만들어버리자!!
귀찮지만 문제를 고치니 바로 해결됐다
"""
최소한 객실으로 예약손님 받기
예약시간 = book_time
10분 청소 필수
필요한 최소 객실의 수
"""
"""
10분 후 계산 했을 경우 분 단위가 59넘어가면 시간 증가해야 하고 분은 오버된 수치로
바꿔줘야 합니다..!
9,17만 계속 안되서 다시 보니 그 부분이 문제였네요..
"""
def converter(in_out, string):
h, m = string.split(':')
if in_out == 0:
m = int(m)
elif in_out == 1:
m = int(m) + 10
h = int(h) * 60
return h + m
def solution(book_time):
answer = 0
room = []
# 특정 기준으로 정렬 (입장 시간 기준)
# sort와 lambda 함수 사용하기
book_time.sort(key = lambda x: x[0]) # ascii 코드값으로 비교 & 정렬
for i in range(len(book_time)):
# string
check_in, check_out = book_time[i][0], book_time[i][1]
# converter
check_in = converter(0, check_in)
check_out = converter(1, check_out)
#print(check_out)
if room: # if list is not empty
for j in range(len(room)):
if room[j] <= check_in:
#print("check out", room[j], "check in" ,check_in)
# update
room[j] = check_out
break
else:
if j+1 == len(room):
room.append(check_out)
else: # if list is empty
room.append(check_out)
answer = len(room)
return answer
반응형
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 2] 시소 짝꿍 (Counter 함수 활용하기) (0) | 2023.03.14 |
---|---|
[Python] [Level 2] 뒤에 있는 큰 수 찾기 (stack 활용하기) (0) | 2023.03.13 |
[Python] [Level 2] 타겟 넘버 (깊이/너비 우선 탐색[DFS/BFS]) ... BFS로 풀기 (0) | 2023.03.11 |
[Python] [Level 2] 혼자서 하는 틱택토 (너무 싫은 문제) (0) | 2023.03.10 |
[Python] [Level 2] 덧칠하기 (파이썬 tmp 활용하기) (0) | 2023.03.10 |