[알고리즘C++]추석 트래픽

후이재·2020년 9월 7일
1

오늘의 문제

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

추석 트래픽

모범 답안

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

using namespace std;
#define abs(x) x<0 ? -x : x
#define epsilon 0.001

vector<string> strtok(string str, char delim = ' '){
	vector<string> ret;
	int prev=0;
	for(int i=0;i<str.size();i++){
		if(str[i]==delim){
			ret.push_back(str.substr(prev,i-prev));
			prev=i+1;
		}
	}
	if(str.size()!=prev)
		ret.push_back(str.substr(prev,str.size()-prev));
	return ret;
}
int solution(vector<string> lines) {
    int answer = 0;
    vector<vector<double>> st;
    
    for(string l: lines){
        vector<string> temp = strtok(l);
        vector<string> stemp = strtok(temp[1], ':');
        double s = stod(stemp[0])*3600+ stod(stemp[1])*60 + stod(stemp[2]);
        double t = stod(strtok(temp[2], 's')[0]);
        st.push_back({s-t +0.001, s}); // 시작, 종료
    }
    
    for(int i=0;i<st.size();i++){
        double begin = st[i][1];
        double end = begin + 0.999;
        
        int count=0;
        for(int j=0;j<st.size();j++){
            if(abs(st[j][1]-begin)>=epsilon && abs(st[j][0]-end)<=epsilon) count++;
        }
        answer = max(answer, count);
    }
    return answer;
}

배울 점

  • 이 문제는 3번은 풀어봐야 할 것 같다. 문자열 처리부터 비교까지 배울 점이 많다
  • strtok를 함수를 만들어 쓰면 나중에 가져와 쓸 수도 있다. 아카이브 해 둬야겠다.
  • double의 a<b계산에서는 abs(a-b)<= 0.001 이런 식으로 비교를 해야 한다는것 기억해야 한다
profile
공부를 위한 벨로그

0개의 댓글