-
[Programmers]2018 KAKAO BLIND RECRUITMENT: [1차] 셔틀버스Problem Solving/Programmers 2021. 2. 24. 01:19
programmers.co.kr/learn/courses/30/lessons/17678
카카오의 문자열 문제
쿠팡의 코딩테스트에서도, 이 문제에서도 시간을 문자열로 받아서 스케줄링하는 문제가 자주 나오던 것 같다
그래서 꼭 정복해야 할 것 같은.... 문제............... 시간 문자열 너무너무 싫지만 ㅠㅠ
시간에 대한 모든 부분을 클래스로 구현해서 관리해줬다.
파이썬에는 datetime이라는 module도 있지만 그건 활용하는 법을 잘 몰라서 우선 클래스로 구현한 뒤 해설을 보고 datetime으로 변형해 볼 계획이다
우선 버스가 도착하는 가장 늦은 시간부터 시작해서 1분씩 감소시키면서, 콘이 탈 수 있는지 여부를 검사해주는 방식으로 구현했다.
import sys import copy class Time: h=0 m=0 def __init__(self,s): self.h=int(s[:2]) self.m=int(s[3:]) def plus(self, t): self.m+=t if self.m>=60: self.m-=60 self.h+=1 if self.h>=24: self.h-=24 def minus(self): if self.h==0 and self.m==0: return False if self.m==0: self.h-=1 self.m=59 else: self.m-=1 return True def same(self, other): if self.h==other.h and self.m==other.m: return True return False def __lt__(self, other): if self.h==other.h: return self.m<=other.m return self.h<=other.h def __repr__(self): return str(self.h)+':'+str(self.m) def st(self): s='' if self.h<10:s+='0' s+=str(self.h) s+=':' if self.m<10:s+='0' s+=str(self.m) return s def solution(n, t, m, timetable): people=[] for k in timetable: people.append(Time(k)) last=Time('09:00') for _ in range(n-1): last.plus(t) while True: p=copy.deepcopy(people) p.append(last) p.sort() bus=Time('09:00') b=True for _ in range(n): for _ in range(m): if len(p)==0 or b==False: break if p[0].__lt__(bus): k = p.pop(0) if k.same(last): if len(p)>=1 and p[0].same(last):continue b=False break bus.plus(t) if b==False: break if not last.minus():break return last.st()
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers]2020 카카오 인턴십: 수식 최대화/문자열(Python) (0) 2021.03.13 [Programmers]2018 KAKAO BLIND RECRUITMENT: [3차] 방금그곡 (0) 2021.03.07 [Programmers] 2018 KAKAO BLIND RECRUITMENT[3차] : 압축 (0) 2021.02.13 [Programmers] 2018 KAKAO BLIND RECRUITMENT[3차]: n진수 게임 (0) 2021.02.13 [Programmers] 2018 KAKAO BLIND RECRUITMENT[1차] 뉴스 클러스터링 (0) 2021.02.12