[Python] 코딩 도장 - 아마존 면접문제
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: 아마존 면접문제] - Lv.2
그 시간 사무실에 몇 명이 있었는가?
A사무실에는 특정일자의 출퇴근 시간이 기록된 거대한 로그파일이 있다고 한다.
파일의 형식은 다음과 같다. (한 라인에서 앞부분은 출근시간(HH:MM:SS), 뒷부분은 퇴근시간이다)
09:12:23 11:14:35
10:34:01 13:23:40
10:34:31 11:20:10
특정시간을 입력(예:11:05:20)으로 주었을 때 그 시간에 총 몇 명이 사무실에 있었는지 알려주는 함수를 작성하시오.
출처: https://codingdojang.com/scode/418?answer_mode=hide
[풀이]
import datetime as dt
logs = [['09:12:23', '11:14:35'],
['10:34:01', '13:23:40'],
['10:34:31', '11:20:10']]
def f():
temp = dt.datetime.today()
i = list(map(int, input().split(":")))
input_time = temp.replace(hour=i[0], minute=i[1], second=i[2])
cnt = 0
for log in logs:
s = list(map(int, log[0].split(":")))
e = list(map(int, log[1].split(":")))
start_time = temp.replace(hour=s[0], minute=s[1], second=s[2])
end_time = temp.replace(hour=e[0], minute=e[1], second=e[2])
d1 = (input_time - start_time).total_seconds()
d2 = (end_time - input_time).total_seconds()
if (d1 > 0) & (d2 > 0):
cnt += 1
return cnt
f()
09:50:00
1
출퇴근 시간 로그파일의 형식이 정해져 있지 않아서 리스트 형태로 만들어 두었다.
만약 (입력시간 - 출근시간), (퇴근시간 - 입력시간)이 모두 양수면 남아있는 사람일 것이다.
datetime
패키지를 이용해서 datetime.timedelta()
로 그 차이를 계산하였다.
패키지를 사용 못한다면 코딩도장 - 남은퇴근시간 계산기 풀이처럼 직접 단위를 변경 시키면 될 듯 하다.
[추천 풀이]
timesheet = [0]*24*60*60
manysheet = [0]*24*60*60
def time2sec(t):
h, m, s = map(int, t.split(":"))
return h*60*60+m*60+s
def load(inputs):
for input in inputs:
s, e = input.split(' ')
s = time2sec(s)
e = time2sec(e)
timesheet[s] += 1
timesheet[e] -= 1
manysheet[0] = timesheet[0]
for i in range(1, 24*60*60):
manysheet[i] = manysheet[i-1] + timesheet[i]
def howmany(time):
sec = time2sec(time)
print(time, manysheet[sec])
input = [
'09:12:23 11:14:35',
'10:34:01 13:23:40',
'10:34:31 11:20:10'
]
if __name__ == "__main__":
load(input)
howmany('09:50:00')
09:50:00 1
24시간을 초 단위 인덱스로 만든 후 초 단위로 몇 명이 있는지 누적합 형태로 나타낸 것 같다.
솔직히 효율적인 방법인지는 판단이 안서는데 이런 아이디어를 생각한 것이 대단해 보인다.
Leave a comment