https://school.programmers.co.kr/learn/courses/30/lessons/92341
이번 문제는 2022 KAKAO BLIND RECURITMENT 문제였습니다.
📝 문제 풀이
1. 차량의 입차 시간을 담을 getIn 맵 선언 (key: 차랑 번호, value: 입차 시간)
2. 각 차량의 주차 이용 시간을 담을 timeOfUse 맵 선언 (key: 차랑 번호, value: 누적된 주차 이용 시간)
3. records 벡터를 순회하며 주차 이용 시간 계산
- records의 각 문자열을 stringstream 타입을 사용하여 시각, 차량번호, 내역 ➡️ time, carNumber, info 변수에 할당 (💡 sstream 헤더 파일 추가해야 함) ⭐️
- info == "IN" 인 경우 getIn[carNumber]에 입차 시간 삽입
- info == "OUT" 인 경우 getIn[carNumber].back()과 출차 시간으로 주차 이용 시간 계산 ➡️ timeOfUse[carNumber]에 누적
4. getIn 맵을 순회하며 출차 내역이 없는 경우에는 출차 시간을 23:59로 계산하여 timeOfUse[carNumber]에 누적
5. timeOfUse 맵을 순회하며 각 차량의 주차 요금 계산
- 주차 이용 시간이 기본 시간 이하라면, 기본 요금 청구
- 주차 이용 시간이 기본 시간을 초과하면, 기본 요금 + 초과한 시간에 대한 단위 시간마다 단위 요금 청구
👩🏻💻 C++ 코드
#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
using namespace std;
int computeTimeOfUse(string ot, string it) {
int hourDiff = stoi(ot.substr(0, 2)) - stoi(it.substr(0, 2));
int minuteDiff = stoi(ot.substr(3, 2)) - stoi(it.substr(3, 2));
return abs(hourDiff * 60 + minuteDiff);
}
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
map<string, vector<string>> getIn; // 각 차량의 입차 시간을 담은 객체
map<string, int> timeOfUse; // 각 차량의 주차 이용 시간을 담은 객체
for (string record: records) {
stringstream ss(record);
string time, carNumber, info;
ss >> time >> carNumber >> info;
// 입차 내역인 경우
if (info == "IN") getIn[carNumber].push_back(time);
else {
string in_time = getIn[carNumber].back();
getIn[carNumber].pop_back();
int time_of_use = computeTimeOfUse(time, in_time);
timeOfUse[carNumber] += time_of_use;
}
}
// 출차 내역이 없는 경우, 출차 시간은 23:59
for (auto it: getIn) {
if (!getIn[it.first].empty()) timeOfUse[it.first] += computeTimeOfUse("23:59", getIn[it.first].back());
}
for (auto it: timeOfUse) {
if (timeOfUse[it.first] <= fees[0]) answer.push_back(fees[1]);
else answer.push_back(fees[1] + ceil((double)(timeOfUse[it.first] - fees[0]) / fees[2]) * fees[3]);
}
return answer;
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 C++ (Lv.1) (0) | 2023.05.01 |
---|---|
[프로그래머스] 키패드 누르기 C++ (Lv.1) (0) | 2023.05.01 |
[프로그래머스] 실패율 C++ (Lv.1) (1) | 2023.04.20 |
[프로그래머스] 더 맵게 C++ (Lv.2) (0) | 2023.04.20 |
[프로그래머스] 택배상자 C++ (Lv.2) (0) | 2023.04.19 |