카테고리 없음

[Programmers - Lv03] 추석 트래픽(C++ / Python)

  • -
728x90

추석 트래픽

 

코딩테스트 연습 - [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-15 21:00:00.748

programmers.co.kr

문제 설명

주어지는 로그 문자열의 구성은 다음과 같다.

"2020-09-15 18:03:00.000 2.000s"

  날짜           종료 시간    처리 시간"

로그 문자열들을 이용하여 로그들이 1초동안 처리할 수 있는 최대 처리량을 구하는 문제이다.

문제 풀이

소스코드 : C++

 

1. 주어지는 로그 문자열(line)을 공백 단위로 스플릿한다.

2. 종료시간(res[1])을 ms 단위로 변환아여 end_time에 저장

3. 시작시간을 구하기 위해 처리시간(res[2])를 ms단위로 변환한다.

4. start_time에 end_time - duration_time +1하여 시작시간을 저장

5. 시작시간과 종료시간을 records에 저장

6. records에 저장된 시간정보를 n * (n-1) 만큼 탐색하여 결과를 구한다.

7. 기준시간 하나를 카운트하고, 이 후 시간정보를 탐색하여 그 시간정보의 시작 시간이 기준시간 + 1안에 들면 cnt+1해준다.

8. answer에 cnt와 answer를 최댓값 갱신해준다.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int time_to_sec(const string time) {
	int h = stoi(time.substr(0, 2));
	int m = stoi(time.substr(3, 2));
	int s = stoi(time.substr(6, 2));
	int ms = stoi(time.substr(9, 3));

	m += h * 60;
	s += m * 60;
	ms += s * 1000;

	return ms;
}

int duration_to_sec(string duration) {
	duration.erase(duration.end() - 1);
	float time = stof(duration);
	int sec = time * 1000;
	return sec;
}

int solution(vector<string> lines) {
	int answer = 0;
	vector<pair<int, int>> records;

	for (string line : lines) {		
		vector<string> res;
		string tmp = "";
		for (int i = 0; i <= line.size(); i++){
			if (line[i] == ' ' || !line[i]){
				res.push_back(tmp);
				tmp = "";
			}
			else tmp +=line[i];
		}

		int end_time = time_to_sec(res[1]);
		int begin_time = end_time - duration_to_sec(res[2]) + 1;
		records.push_back(make_pair(begin_time, end_time));
	}

	for (int i = 0; i < records.size(); i++) {
		int cnt = 1;
		int endTime = records[i].second;

		for (int j = i + 1; j < records.size(); j++) {
			if (records[j].first < endTime + 1000) {
				cnt++;
			}
		}
		answer = max(cnt, answer);
	}

	return answer;
}
728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.