각 로그에 고유한 ID와 타임스탬프가 포함된 일부 로그가 있다고 가정합니다. Timestamp는 Year:Month:Day:Hour:Minute:Second 형식의 문자열입니다(예:2019:01:01:23:59:59). 모든 도메인은 0으로 채워진 십진수입니다.
우리는 다음 기능을 구현하기 위해 로그 저장 시스템을 설계해야 합니다 -
-
void Put(int id, string timestamp):로그의 고유 ID와 타임스탬프를 가져와 스토리지 시스템에 저장합니다.
-
int[] Retrieve(String start, String end, String granularity):타임스탬프가 시작에서 끝 매개변수 범위 내에 있는 로그의 ID를 반환합니다. 세분성 매개변수는 고려할 시간 수준을 나타냅니다. 예를 들어, start ="2019:01:01:23:59:59", end ="2019:01:02:23:59:59", granularity ="Day"는 다음을 찾아야 함을 의미합니다. 2019년 1월 1일부터 2019년 1월 2일 사이의 로그입니다.
따라서 입력이 다음과 같으면
-
넣어(1, "2019:01:01:23:59:59");
-
넣어(2, "2019:01:01:22:59:59");
-
넣어(3, "2018:01:01:00:00:00");
-
검색("2018:01:01:01:01:01","2019:01:01:23:00:00","연도");
-
검색("2018:01:01:01:01:01","2019:01:01:23:00:00","시");
2018:01:01:01부터 2019까지의 모든 로그를 반환해야 하기 때문에 2018년과 2019년 범위 내의 모든 로그와 [1,2] 범위 내의 모든 로그를 반환해야 하므로 출력은 [1,2,3]이 됩니다. 01:01:23, 여기서 로그 3은 범위를 벗어납니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
이니셜라이저를 정의합니다.
-
로그 :=새 목록
-
함수 put()을 정의합니다. ID, 타임스탬프가 필요합니다.
-
로그 끝에 ID, 타임스탬프 삽입
-
retrieve() 함수를 정의합니다. s, e, gra
가 소요됩니다. -
index :={'Year':5, 'Month' :8, 'Day' :11, 'Hour' :14, 'Minute' :17, 'Second' :20}[gra]
와 같은 지도 -
시작 :=s[인덱스 0에서 인덱스까지]
-
end :=e[인덱스 0에서 인덱스까지]
-
반환(각 tid에 대한 tid, start <=timestamp[인덱스 0에서 인덱스까지] <=end)인 경우 로그의 타임스탬프
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class LogSystem(object): def __init__(self): self.logs = [] def put(self, id, timestamp): self.logs.append((id, timestamp)) def retrieve(self, s, e, gra): index = {'Year':5, 'Month' : 8, 'Day' : 11, 'Hour' : 14, 'Minute' : 17, 'Second' :20}[gra] start = s[:index] end = e[:index] return (tid for tid, timestamp in self.logs if start <= timestamp[:index] <= end) ob = LogSystem() ob.put(1, "2019:01:01:23:59:59") ob.put(2, "2019:01:01:22:59:59") ob.put(3, "2018:01:01:00:00:00") print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year"))) print(list(ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")))
입력
ob.put(1, "2019:01:01:23:59:59") ob.put(2, "2019:01:01:22:59:59") ob.put(3, "2018:01:01:00:00:00") ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Year") ob.retrieve("2018:01:01:01:01:01","2019:01:01:23:00:00","Hour")
출력
[1, 2, 3] [1, 2]