programmers.co.kr/learn/courses/30/lessons/17676
<풀이>
1. 주어진 문자열을 통해 '요청 시작 시간'과 '처리 완료 시간'을 분리합니다.
2. 초당 최대 처리량을 결과값으로 저장합니다.
3. 결과를 반환합니다.
<해법>
1. 문자열 문제 마음가짐
=> 문자열 문제를 마주했을 때, 가장 먼저 '문자열을 다루는 함수'를 적극적으로 사용하겠다는 마음가짐을 가져야합니다. 저는 문자열 문제를 풀 때, 간단한 조건식으로 풀 수 있는 문제라도 문자열을 다루는 함수를 적극적으로 사용하여 문제를 풉니다.
2. 시간 계산
=> 초당 최대 처리량을 구하기 위해서는 각 문자열 마다 '요청 시작 시간'을 알아야합니다. 또, '요청 시작 시간'을 구하기 위해서는 시간을 계산할 수 있는 형태로 만들어야 합니다. 그래서, 저는 시간을 millisecond형태로 바꾸어서 계산하였습니다.
3. 초당 최대 처리량을 구하는 방법
=> 시간은 '응답 완료 시간'을 기준으로 오름차순 되어있습니다. 각 시간의 '응답 완료 시간'부터 1초 후 시간까지 선을 그어가며 초당 처리량을 구합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//구조 : 시간(시작 시간, 끝 시간)
struct Time {
int start_time, end_time;
};
int solution(vector<string> lines) {
int answer = 0;
vector<Time> v;
//문자열 파싱
for (int i = 0; i < lines.size(); i++) {
string h, m, s, process;
int int_h, int_m, int_s, int_process;
//시, 분, 초, 처리시간 파싱 (ex. "2016-09-15 20:59:57.421 0.351s")
h = lines[i].substr(11, 2); //"20"
m = lines[i].substr(14, 2); //"59"
s = lines[i].substr(17, 6); //"57.421"
process = lines[i].substr(24); //"0.351s"
process = process.substr(0, process.length() - 1); //"0.351"
//string -> int
int_h = stoi(h) * 60 * 60 * 1000;
int_m = stoi(m) * 60 * 1000;
int_s = stod(s) * 1000;
int_process = stod(process) * 1000;
//시간 변수(시작시간, 끝시간) 생성
int end_time = int_h + int_m + int_s;
int start_time = end_time - int_process + 1;
Time t = { start_time, end_time };
//저장
v.push_back(t);
}
//초당 최대 처리량 구하기
for (int i = 0; i < v.size(); i++) {
int tmpAnswer = 0;
Time t = v[i];
int check_time = t.end_time + 1000 - 1;
//끝 시간 보다 시작 시간이 작다면, 처리량 + 1
for (int j = i; j < v.size(); j++) {
if (v[j].start_time <= check_time) {
tmpAnswer++;
}
}
//최대 처리량 갱신
if (tmpAnswer > answer) {
answer = tmpAnswer;
}
}
return answer;
}
|
문자열 처리에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 - 셔틀버스 (0) | 2021.01.04 |
---|---|
[C++] 프로그래머스 - 뉴스 클러스터링 (0) | 2021.01.01 |
[C++] 프로그래머스 - 후보키 (0) | 2020.05.15 |
[C++] 프로그래머스 - 실패율 (0) | 2020.05.15 |
[C++] 프로그래머스 - 불량 사용자 (0) | 2020.05.15 |