https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

카카오에서 출제한 lv2문제치고는 굉장히 간단한 문제입니다.
다만 구현할거리가 적진 않았네요
기본적으로 주어진 문자열을 파싱하고 이를 통해서 자료구조에 저장해가며 해결하는 방식입니다.
단순 구현문제이기에 사람마다 해결방식이 다를 수 있습니다.
저는 차가 들어간 시간만을 기록하는 map과 결과를 기록하는 map을 사용했습니다.
문제의 시간이 빡빡하지는 않을 거라 마지막에 정렬하는게 귀찮기 때문에 ordered_map을 그대로 사용했습니다.
파싱은 문자열의 형식이 정해져있기 때문에 char하나하나를 받아 구조체에 넣어줬는데 stringstream을 잘 사용하시는 분이라면 더 편하게 파싱할 수 있었겠네요
using namespace std;
struct parking
{
int time;
int number;
bool isIn;
};
// fee = [기본 시간, 기본 요금, 단위 시간, 단위 요금]
// record = ["00:00 0000 INorOUT"]
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
vector<parking> parkings;
map<int, int> resultMap;
map<int, int> carInMap;
for (string record : records)
{
parking park;
int temp = record[0] - '0';
temp = temp * 10 + (record[1] - '0');
park.time = temp;
temp = record[3] - '0';
temp = temp * 10 + (record[4] - '0');
park.time = park.time * 60 + temp;
int number = record[6] - '0';
number = number * 10 + (record[7] - '0');
number = number * 10 + (record[8] - '0');
number = number * 10 + (record[9] - '0');
park.number = number;
if (record[11] == 'I') park.isIn = true;
else park.isIn = false;
parkings.push_back(park);
resultMap[number] = 0;
carInMap[number] = -1;
}
for (const parking& park : parkings)
{
if (park.isIn)
{
carInMap[park.number] = park.time;
}
else
{
resultMap[park.number] +=
park.time - carInMap[park.number];
carInMap[park.number] = -1;
}
}
for (auto elem : carInMap)
{
if (elem.second != -1)
{
resultMap[elem.first] += 23 * 60 + 59 - elem.second;
}
int fee = 0;
if (resultMap[elem.first] > fees[0])
{
fee = fees[1] +
ceil(((double)resultMap[elem.first] - fees[0]) / fees[2])
* fees[3];
}
else
{
fee = fees[1];
}
answer.push_back(fee);
}
return answer;
}'Algorithm > PS' 카테고리의 다른 글
| [1일 1알고] 택배 배달과 수거하기 (0) | 2026.05.05 |
|---|---|
| [1일 1알고] 카드 짝 맞추기 (0) | 2026.05.05 |
| [1일 1알고] 택배 상자 꺼내기 (0) | 2026.04.30 |
| [1일 1알고] [PCCP 기출문제] 4번 / 수식 복원하기 (0) | 2026.04.29 |
| [1일 1알고] 유연 근무제 (0) | 2026.04.24 |