티스토리 뷰
2018 카카오 블라인드 코딩 1차
http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
카카오 에서는 블라인드 전형으로 공채 채용을 하고 있는데요, 이번 포스팅에선 2018년 1차 문제에 대해 살펴보겠습니다. 1차 문제는 총 7문제로 구성되어 있는데요, 5시간동안 4문제 이상 풀어내면 합격이라고 합니다. 언어는 어떤 언어든 상관 없으며 C, C++, JAVA, PYTHON 등 다양한 언어가 사용되었다고 합니다.
4. 셔틀버스 - 문제
카카오에서는 무료 셔틀버스를 운행하기 때문에 판교역에서 편하게 사무실로 올 수 있다. 카카오의 직원은 서로를 ‘크루’라고 부르는데, 아침마다 많은 크루들이 이 셔틀을 이용하여 출근한다.
이 문제에서는 편의를 위해 셔틀은 다음과 같은 규칙으로 운행한다고 가정하자.
셔틀은 09:00부터 총 n회 t분 간격으로 역에 도착하며, 하나의 셔틀에는 최대 m명의 승객이 탈 수 있다.
셔틀은 도착했을 때 도착한 순간에 대기열에 선 크루까지 포함해서 대기 순서대로 태우고 바로 출발한다. 예를 들어 09:00에 도착한 셔틀은 자리가 있다면 09:00에 줄을 선 크루도 탈 수 있다.
일찍 나와서 셔틀을 기다리는 것이 귀찮았던 콘은, 일주일간의 집요한 관찰 끝에 어떤 크루가 몇 시에 셔틀 대기열에 도착하는지 알아냈다. 콘이 셔틀을 타고 사무실로 갈 수 있는 도착 시각 중 제일 늦은 시각을 구하여라.
단, 콘은 게으르기 때문에 같은 시각에 도착한 크루 중 대기열에서 제일 뒤에 선다. 또한, 모든 크루는 잠을 자야 하므로 23:59에 집에 돌아간다. 따라서 어떤 크루도 다음날 셔틀을 타는 일은 없다.
입력 형식
셔틀 운행 횟수 n, 셔틀 운행 간격 t, 한 셔틀에 탈 수 있는 최대 크루 수 m, 크루가 대기열에 도착하는 시각을 모은 배열 timetable이 입력으로 주어진다.
0 < n ≦ 10
0 < t ≦ 60
0 < m ≦ 45
timetable은 최소 길이 1이고 최대 길이 2000인 배열로, 하루 동안 크루가 대기열에 도착하는 시각이 HH:MM 형식으로 이루어져 있다.
크루의 도착 시각 HH:MM은 00:01에서 23:59 사이이다.
출력 형식
콘이 무사히 셔틀을 타고 사무실로 갈 수 있는 제일 늦은 도착 시각을 출력한다. 도착 시각은 HH:MM 형식이며, 00:00에서 23:59 사이의 값이 될 수 있다.
입출력 예제
곰가드의 코드
def value_input(minvalue = 0,value = []):idx_str, max_value = ['n','t','m'], [10,60,45]for i in range(3):while True:try:input_value = int(input('{} = '.format(idx_str[i])))if minvalue < input_value <= max_value[i]:value.append(input_value)breakelse:print('wrong value')except:passreturn valuedef make_bustable(n,t,m, res=[]):for i in range(n):res.append(i*t+540)return resdef make_crewtable(res = []):while True:try:res = sorted(list(map(str2time,input('crew = ').split())), reverse = True)breakexcept:passreturn resdef str2time(string):return int(string[:2])*60+int(string[3:5])def time2str(value):return str(int(value/60)).zfill(2)+":"+str(value%60).zfill(2)n,t,m = value_input()timetable_bus = make_bustable(n,t,m)timetable_crew = make_crewtable()res_table = [[] for i in range(n)]for i in range(len(timetable_bus)):for j in range(len(timetable_crew)-1,-1,-1):if timetable_crew[j] <= timetable_bus[i] and len(res_table[i]) < m:res_table[i].append(timetable_crew.pop(j))try:print(time2str(res_table[-1][m-1]-1))except:print(time2str(timetable_bus[-1]))
value_input 메소드는 n, t, m 값을 범위에 맞게 조건 검사하며 받는 메소드 입니다.
make_bustable 메소드는 n, t, m 을 기반으로 버스 시간표를 만들어 냅니다. 00:00 을 0 으로 분단위로 변환해서 res 리스트를 반환합니다.
make_crewtable 메소드는 크루들의 시간을 받아 분형태로 변환한 뒤 정렬해서 리스트를 반환합니다.
str2time, time2str 메소드는 09:00 형태의 string 값을 540 으로, 540을 09:00 의 형태로 변환해주는 메소드 입니다.
크루들을 탈 수 있는 버스들에 배정한 뒤 기본적으로는 가장 마지막인원의 시간보다 1분 빠른 시간을 반환합니다. 만약 버스에 탈 수 있는 인원보다 기다리는 인원이 적은 경우에는 마지막 버스 시간을 반환합니다.
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'#Archive' 카테고리의 다른 글
2018 카카오 신입 공채 1차 블라인드 코딩테스트 문제 05 (0) | 2018.01.16 |
---|---|
다이나믹 프로그래밍 - 동적 계획법 (0) | 2018.01.15 |
1003. 피보나치 함수 - 메모이제이션 (0) | 2018.01.14 |
반드시 알아야하는 알고리즘 top 8 - 8. 몬테 카를로 알고리즘 (0) | 2018.01.04 |
[SQL] 10. 테이블 늘려나가기 - 집합 연산자 (0) | 2018.01.03 |
- Total
- Today
- Yesterday
- 여름캠핑
- 가평캠핑
- 글램핑
- 영월캠핑
- 알고리즘
- 여름휴가
- sql
- 백준
- SeoulTravel
- 반려견캠핑
- 계곡캠핑
- 가족캠핑
- 자연힐링
- bukhansannationalpark
- Oracle
- 여름휴가추천
- 카카오
- 캠핑초보
- 서울근교캠핑
- 파이썬
- 가족여행
- python
- 머신러닝
- 커플여행
- 영월여행
- 가평여행
- 캠핑장추천
- 강원도캠핑
- 강원도여행
- Koreancuisine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |