본문 바로가기
Algorithm/문제 풀이 (Problem Solving)

[C++, 문자열, 슬라이딩 윈도우] 프로그래머스 추석 트래픽

by matters_ 2022. 4. 5.

문제

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

 

 

 

해답

문자열 parsing 후 배열에 담고 스케줄링이 완료된 끝나는 시간을 기준으로 첫 항목부터 검사를 진행합니다.

1초간 윈도우를 잡고 해당구간에 다른 후보군이 있다면 count하는 방법으로 진행했습니다. 

 

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

using namespace std;

class ScheduledTime {
public:
	int startT, endT;
};

vector <ScheduledTime> scheduled;

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

	for (auto str : lines) {
		string Time = str.substr(11, 12);
		string duration = str.substr(24);
		duration.erase(duration.end() - 1);

		int endTime = (((stoi(Time.substr(0, 2)) * 3600) +
        		(stoi(Time.substr(3, 2)) * 60) +
        		stoi(Time.substr(6, 2))) * 1000)
				+ stoi(Time.substr(9,3));

		int durationTime = (stod(duration) * 1000);

		int startTime = endTime - durationTime + 1;
		cout << startTime << " " << endTime << "\n";
		scheduled.push_back({startTime, endTime});
	}



	for (int i = 0; i < scheduled.size();i++) {
		int startTime = scheduled[i].endT;
		int endTime = scheduled[i].endT + 999;
		int thres = 0;

		for (int k = 0; k < scheduled.size(); k++) {
			if (scheduled[k].startT <= endTime && scheduled[k].endT >= startTime)
				thres++;
		}
		answer = max(answer, thres);
	}

	return answer;
}

댓글