[プログラマー]中秋節の流量
回答日:2021-07-17
質問する
質問する
質問リンク:https://programmers.co.kr/learn/courses/30/lessons/17676
アクセスと解析
これは文字列処理と数値計算が必要な問題です.
难しくはないですが、理解力が足りないので、时间をかけて问题を理解しました.
タイミングを容易にするために,入力ログ文字列を適切に処理し,時間をmsに変換した.
ログデータを遍歴しながら,各プロセスの終了後1秒以内に同時に処理されるプロセスの最大数を求めた.
コード#コード# #include <string>
#include <vector>
#include <sstream>
using namespace std;
vector<string> split(string input, char delimiter) {
vector<string> answer;
stringstream ss(input);
string temp;
while (getline(ss, temp, delimiter)) {
answer.push_back(temp);
}
return answer;
}
int solution(vector<string> lines) {
int answer = 0;
vector<int> EndTime, ProcessTime;
for (auto a : lines) {
stringstream ss(a);
string date, time, task;
ss >> date >> time >> task;
vector<string> tmp = split(time, ':');
string HH = tmp[0];
string MM = tmp[1];
string SS = tmp[2];
SS.erase(SS.begin() + 2, SS.begin() + 3); // 소수점 제거
task.erase(task.end() - 1, task.end()); // 's' 제거
int t = stod(task) * 1000;
int msecs = stoi(HH) * 60 * 60 * 1000 + stoi(MM) * 60 * 1000 + stoi(SS);
EndTime.push_back(msecs);
ProcessTime.push_back(t);
}
for (int i = 0; i < lines.size(); i++) {
int cnt = 1; // 1개는 무조건 처리중
int scope = EndTime[i] + 1000; // 임의의 프로세스가 끝나는 시간 + 1초까지 범위
for (int j = i + 1; j < lines.size(); j++) { // 다음 프로세스부터 확인
int nextStart = EndTime[j] - ProcessTime[j] + 1; // 처리시간은 시작시간과 끝시간을 포함하므로
if (nextStart < scope) { // 다음 프로세스 시작시간이 범위 내에 존재하면
cnt++;
}
}
answer = max(answer, cnt);
}
return answer;
}
結果
フィードバック
なぜ文字列を扱うのにどんなに問題を解いても慣れないのか...
Pythonで文字列を処理するのが便利だと聞いて、Pythonを勉強するようになりました.
Reference
この問題について([プログラマー]中秋節の流量), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-추석-트래픽
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
これは文字列処理と数値計算が必要な問題です.
难しくはないですが、理解力が足りないので、时间をかけて问题を理解しました.
タイミングを容易にするために,入力ログ文字列を適切に処理し,時間をmsに変換した.
ログデータを遍歴しながら,各プロセスの終了後1秒以内に同時に処理されるプロセスの最大数を求めた.
コード#コード# #include <string>
#include <vector>
#include <sstream>
using namespace std;
vector<string> split(string input, char delimiter) {
vector<string> answer;
stringstream ss(input);
string temp;
while (getline(ss, temp, delimiter)) {
answer.push_back(temp);
}
return answer;
}
int solution(vector<string> lines) {
int answer = 0;
vector<int> EndTime, ProcessTime;
for (auto a : lines) {
stringstream ss(a);
string date, time, task;
ss >> date >> time >> task;
vector<string> tmp = split(time, ':');
string HH = tmp[0];
string MM = tmp[1];
string SS = tmp[2];
SS.erase(SS.begin() + 2, SS.begin() + 3); // 소수점 제거
task.erase(task.end() - 1, task.end()); // 's' 제거
int t = stod(task) * 1000;
int msecs = stoi(HH) * 60 * 60 * 1000 + stoi(MM) * 60 * 1000 + stoi(SS);
EndTime.push_back(msecs);
ProcessTime.push_back(t);
}
for (int i = 0; i < lines.size(); i++) {
int cnt = 1; // 1개는 무조건 처리중
int scope = EndTime[i] + 1000; // 임의의 프로세스가 끝나는 시간 + 1초까지 범위
for (int j = i + 1; j < lines.size(); j++) { // 다음 프로세스부터 확인
int nextStart = EndTime[j] - ProcessTime[j] + 1; // 처리시간은 시작시간과 끝시간을 포함하므로
if (nextStart < scope) { // 다음 프로세스 시작시간이 범위 내에 존재하면
cnt++;
}
}
answer = max(answer, cnt);
}
return answer;
}
結果
フィードバック
なぜ文字列を扱うのにどんなに問題を解いても慣れないのか...
Pythonで文字列を処理するのが便利だと聞いて、Pythonを勉強するようになりました.
Reference
この問題について([プログラマー]中秋節の流量), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-추석-트래픽
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <string>
#include <vector>
#include <sstream>
using namespace std;
vector<string> split(string input, char delimiter) {
vector<string> answer;
stringstream ss(input);
string temp;
while (getline(ss, temp, delimiter)) {
answer.push_back(temp);
}
return answer;
}
int solution(vector<string> lines) {
int answer = 0;
vector<int> EndTime, ProcessTime;
for (auto a : lines) {
stringstream ss(a);
string date, time, task;
ss >> date >> time >> task;
vector<string> tmp = split(time, ':');
string HH = tmp[0];
string MM = tmp[1];
string SS = tmp[2];
SS.erase(SS.begin() + 2, SS.begin() + 3); // 소수점 제거
task.erase(task.end() - 1, task.end()); // 's' 제거
int t = stod(task) * 1000;
int msecs = stoi(HH) * 60 * 60 * 1000 + stoi(MM) * 60 * 1000 + stoi(SS);
EndTime.push_back(msecs);
ProcessTime.push_back(t);
}
for (int i = 0; i < lines.size(); i++) {
int cnt = 1; // 1개는 무조건 처리중
int scope = EndTime[i] + 1000; // 임의의 프로세스가 끝나는 시간 + 1초까지 범위
for (int j = i + 1; j < lines.size(); j++) { // 다음 프로세스부터 확인
int nextStart = EndTime[j] - ProcessTime[j] + 1; // 처리시간은 시작시간과 끝시간을 포함하므로
if (nextStart < scope) { // 다음 프로세스 시작시간이 범위 내에 존재하면
cnt++;
}
}
answer = max(answer, cnt);
}
return answer;
}
フィードバック
なぜ文字列を扱うのにどんなに問題を解いても慣れないのか...
Pythonで文字列を処理するのが便利だと聞いて、Pythonを勉強するようになりました.
Reference
この問題について([プログラマー]中秋節の流量), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-추석-트래픽
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([プログラマー]中秋節の流量), 我々は、より多くの情報をここで見つけました https://velog.io/@bestcoders/프로그래머스-추석-트래픽テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol