[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