https://programmers.co.kr/learn/courses/30/lessons/17676

 

코딩테스트 연습 - [1차] 추석 트래픽

입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1

programmers.co.kr

 

예제 1과 2의 차이를 명확하게 인지

** 처리시간은 시작시간과 끝 시간을 '포함'하므로

2016-09-15 01:00:04.002 2.0s

 1:00:02.003 부터 1:00:04.002 까지 

!! 1:00:02.002 부터가 아님! 끝난 시간에서 처리 시간을 빼고 0.001ms를 더해줘야 시작시간이 됨 !!

(h + m + s + ms - duration + 1)

 

이것만 알면 나머진 간단

2중 포문을 통해 시작 시간과 끝 시간을 비교하면서 끝 시간이 시작 시간보다 넘는다면, 즉, 겹친다면

해당 시간에 처리되는 프로세스의 개수를 1 증가

 

그렇게 나온 값들 중 가장 큰 값을 answer에 넣고 출력 (max함수)

int solution(vector<string> lines) {
	int answer = 0;
	vector<string> temp = lines;
	vector<int> start;
	vector<int> end;



	for (int i = 0; i < temp.size();i++) {
		int h, m, s, ms;
		float duration;
		temp[i].pop_back();
		h = stoi(lines[i].substr(11, 2)) * 3600 * 1000;
		m = stoi(lines[i].substr(14, 2)) * 60 * 1000;
		s = stoi(lines[i].substr(17, 2)) * 1000;
		ms = stoi(lines[i].substr(20, 3));
		duration = stof(lines[i].substr(24, 5)) * 1000;
		start.push_back(h + m + s + ms - duration + 1);
		end.push_back(h + m + s + ms);
	}

	for (int i = 0; i < lines.size();i++) {
		int end_t = end[i] + 1000;
		int cnt = 1;
		for (int j = i + 1; j < lines.size();j++) {
			int current_t = start[j];
			if (end_t > current_t) {
				cnt++;
			}
		}
		answer = max(answer, cnt);

	}
	return answer;
}

 

+ Recent posts