문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/92341
코딩테스트 연습 - 주차 요금 계산
[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]
programmers.co.kr
문제에서 주어진대로 구현하면 되는 문제였습니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <string> | |
#include <vector> | |
#include <algorithm> | |
#include <cmath> | |
#include <set> | |
#include <map> | |
#include <iostream> | |
using namespace std; | |
const string MAX_TO = "23:59"; | |
typedef struct | |
{ | |
string from; | |
string to; | |
} Time; | |
int getDiffMinute(string from, string to) | |
{ | |
int toHour = stoi(to.substr(0, 2)); | |
int toMinute = stoi(to.substr(3, 2)); | |
int fromHour = stoi(from.substr(0, 2)); | |
int fromMinute = stoi(from.substr(3, 2)); | |
return (toHour - fromHour) * 60 + (toMinute - fromMinute); | |
} | |
vector<int> solution(vector<int> fees, vector<string> records) { | |
map<string, vector<Time>> carRecords; | |
set<string> carNumbers; | |
for (string record : records) | |
{ | |
string temp; | |
vector<string> v; | |
for (char c : record) | |
{ | |
if (c == ' ') | |
{ | |
v.push_back(temp); | |
temp = ""; | |
continue; | |
} | |
temp += c; | |
} | |
carNumbers.insert(v[1]); | |
if (temp == "IN") | |
{ | |
carRecords[v[1]].push_back({v[0], ""}); | |
} | |
else | |
{ | |
for (int i = 0; i < carRecords[v[1]].size(); i++) | |
{ | |
if (carRecords[v[1]][i].to == "") | |
{ | |
carRecords[v[1]][i].to = v[0]; | |
break; | |
} | |
} | |
} | |
} | |
vector<int> answer; | |
for (string carNumber : carNumbers) | |
{ | |
int diffMinute = 0; | |
for (Time time : carRecords[carNumber]) | |
{ | |
if (time.to == "") | |
{ | |
time.to = MAX_TO; | |
} | |
diffMinute += getDiffMinute(time.from, time.to); | |
} | |
int fee = fees[1] + ceil(max(diffMinute - fees[0], 0) / double(fees[2])) * fees[3]; | |
answer.push_back(fee); | |
} | |
return answer; | |
} |

개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers] 행렬의 곱셈 (0) | 2022.03.12 |
---|---|
[Programmers] 최솟값 만들기 (0) | 2022.03.08 |
[Programmers] 최댓값과 최솟값 (0) | 2022.03.05 |
[Programmers] 숫자의 표현 (0) | 2022.03.05 |
[Programmers] 땅따먹기 (0) | 2022.03.05 |