logging시스템을 구현. string 타입의 메시지와 timestamp가 입력된다. 동일한 메시지를 새로 받으려면 10초 이후에 가능하다. 가령 "foo"라는 메시지가 3초에 도착했었고. 9초에 "foo"가 도착했다면 메시지를 새로 저장할수없다(false가 return). 만약 13초에 도착한다면 새로 받을수 있다(true 리턴).
Input
["Logger", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage"]
[[], [1, "foo"], [2, "bar"], [3, "foo"], [8, "bar"], [10, "foo"], [11, "foo"]]
Output
[null, true, true, false, false, false, true]
Explanation
Logger logger = new Logger();
logger.shouldPrintMessage(1, "foo"); // return true, next allowed timestamp for "foo" is 1 + 10 = 11
logger.shouldPrintMessage(2, "bar"); // return true, next allowed timestamp for "bar" is 2 + 10 = 12
logger.shouldPrintMessage(3, "foo"); // 3 < 11, return false
logger.shouldPrintMessage(8, "bar"); // 8 < 12, return false
logger.shouldPrintMessage(10, "foo"); // 10 < 11, return false
logger.shouldPrintMessage(11, "foo"); // 11 >= 11, return true, next allowed timestamp for "foo" is 11 + 10 = 21
class Logger {
public:
unordered_map<std::string, int> map;
Logger() {
}
bool shouldPrintMessage(int timestamp, string message) {
if (map.find(message) != map.end()) {
if (timestamp < map[message] + 10) {
return false;
}
}
map[message] = timestamp;
return true;
}
};
공감하며 읽었습니다. 좋은 글 감사드립니다.