코딩테스트 역량 강화 교육(거점형 특화 프로그램)이라는 프로그램에 참여해 공부한 내용입니다.
- IT 직무로 취업을 희망하는 지원자들이 코딩테스트를 통과할 수 있는 알고리즘을 활용한 프로그래밍 교육이며, PCCP 자격증 취득이 목표인 프로그램
- 상세 설명 - 수원대학교(대학일자리 플러스센터)
앞서 공부한 해시을 사용해 경고 메일 문제를 풀어보겠다.
엘리트정보원은 보안실에 극비문서를 보관하고 있습니다.
직원들은 하루동안 보안실을 이용한 총 시간이 특정시간을 넘기면 경고 메일이 받습니다. 매개변수 reports에 보안실을 이용한 출입기록이 주어지고, time에 경고 메일을 받게되는 특정 이용시간이 주어지면 보안실 출입기록을 바탕으로 경고 메일을 받게되는 직원의 이름을 알파 벳 사전순으로 배열에 담아 반환하는 프로그램을 작성하세요.
보안실 출입기록(reports) | 제한 시간(time) | 출력(answer) |
---|---|---|
["john 09:30 in", "daniel 10:05 in", "john 10:15 out", "luis 11:57 in", "john 12:03 in", "john 12:20 out", "luis 12:35 out", "daniel 15:05 out"] | 60 | ["daniel", "john"] |
["bill 09:30 in", "daniel 10:00 in", "bill 11:15 out", "luis 11:57 in", "john 12:03 in", "john 12:20 out", "luis 14:35 out", "daniel 14:55 out"] | 120 | ["daniel", "luis"] |
["cody 09:14 in", "bill 09:25 in", "luis 09:40 in", "bill 10:30 out", "cody 10:35 out", "luis 10:35 out", "bill 11:15 in", "bill 11:22 out", "luis 15:30 in", "luis 15:33 out"] | 70 | ["bill", "cody"] |
["chato 09:15 in", "emilly 10:00 in", "chato 10:15 out", "luis 10:57 in", "daniel 12:00 in", "emilly 12:20 out", "luis 11:20 out", "daniel 15:05 out"] | 60 | ["daniel", "emilly"] |
from collections import defaultdict
def solution(reports, time):
answer = []
def getTime(time):
H, M = time.split(':')
return (int(H) * 60) + int(M)
inT = sumT = defaultdict(int)
for report in reports:
name, rT, state = report.split()
if state == 'in':
inT[name] = getTime(rT)
else:
sumT[name] += getTime(rT) - inT[name]
for key in sumT:
if sumT[key] > time:
answer.append(key)
return sorted(answer)
print(solution(["john 09:30 in", "daniel 10:05 in", "john 10:15 out", "luis 11:57 in", "john 12:03 in", "john 12:20 out", "luis 12:35 out", "daniel 15:05 out"], 60))
print(solution(["bill 09:30 in", "daniel 10:00 in", "bill 11:15 out", "luis 11:57 in", "jhon 12:03 in", "jhon 12:20 out", "luis 14:35 out", "daniel 14:55 out"], 120))
print(solution(["cody 09:14 in", "bill 09:25 in", "luis 09:40 in", "bill 10:30 out", "cody 10:35 out", "luis 10:35 out", "bill 11:15 in", "bill 11:22 out", "luis 15:30 in", "luis 15:33 out"], 70))
print(solution(["chato 09:15 in", "emilly 10:00 in", "chato 10:15 out", "luis 10:57 in", "daniel 12:00 in", "emilly 12:20 out", "luis 11:20 out", "daniel 15:05 out"], 60))
getTime(time)
함수를 만들었다.inT
와 사람마다 총 이용시간을 저장해주는 sumT
를 defaultdict(int)
를 이용해 모든 key
값을 0
으로 초기화in
인 경우 : inT[name]
에 출입 시간
(나간 시간 - 들어온 시간)을 기록out
인 경우 : sumT[name]
에 이용 시간을 더함sumT
에 저장되어있는 이용시간 중 주어진 제한시간 time
보다 큰 사람은 answer
에 삽입return