일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Loss Function
- JPA
- google cloud
- marksense.ai
- 코드업
- STT
- Spring Boot
- react native
- skt fellowship 3기
- pandas
- Spring
- Expo
- YOLOv5
- OG tag
- 2021 제9회 문화공공데이터 활용경진대회
- javascript
- AWS
- 양방향 매핑
- oauth
- google login
- 커스텀 데이터 학습
- google 로그인
- yolo
- 순환참조
- C++
- @Transactional
- 졸프
- matplotlib
- idToken
- html
Archives
- Today
- Total
민팽로그
[프로그래머스/2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산 본문
작성 코드 먼저.
#include <string>
#include <sstream>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
// 자동차 차량번호별로 주차시간을 구해야 함
// 차량번호가 중복저장되지 않게 하기 위해 map 자료형을 사용하는게 좋을듯(차량번호 - 중복 불가, string, 입차 또는 출차 시간 - vector<string>)
// second 길이 검사: map 자료형의 second 길이가 홀수라면 끝에 23:59 추가
// map은 key값을 기준으로 오름차순 정렬하기 때문에 이 부분은 고려하지 않아도 됨
// (차량번호가 작은 순서대로)누적 주차 시간을 계산하여 벡터로 리턴
vector<int> calculate_time(map<string, vector<string>>& m) {
vector<int> time;
for(auto x: m) {
if(x.second.size() % 2 == 1) x.second.push_back("23:59");
int min = 0;
for(size_t i = 0; i < x.second.size(); i += 2) {
string hour1, hour2, min1, min2;
hour1 = x.second[i].substr(0, 2);
min1 = x.second[i].substr(3, 2);
hour2 = x.second[i + 1].substr(0, 2);
min2 = x.second[i + 1].substr(3, 2);
int m1, m2, h1, h2;
m1 = stoi(min1); m2 = stoi(min2); h1 = stoi(hour1); h2 = stoi(hour2);
if((m2 - m1) < 0) {
h2 -= 1;
m2 += 60;
}
min += (((h2 - h1) * 60) + m2 - m1);
}
time.push_back(min);
}
return time;
}
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
map<string, vector<string>> car_record;
for(size_t i = 0; i < records.size(); i++) {
// records에서 시간, 차량번호, 입출차 내역 분리
string time, car_num;
istringstream ss(records[i]);
getline(ss, time, ' ');
getline(ss, car_num, ' ');
// map 자료구조에 차량번호에 따른 입출차 시간 저장
if(car_record.find(car_num) == car_record.end())
car_record.insert({car_num, vector<string>(0)});
car_record[car_num].push_back(time);
}
vector<int> time;
time = calculate_time(car_record);
// 요금 계산
for(auto x: time) {
if(x <= fees[0])
answer.push_back(fees[1]);
else
answer.push_back((ceil((x - fees[0]) / (float)fees[2]) * fees[3]) + fees[1]);
}
return answer;
}
문자열을 다루는 것에 익숙하지 않아서 문제 푸는 속도가 더 느린것 같다.
이번엔 substr 함수이다.
string 타입의 문자열에서 일부분을 얻어올 수 있는 함수이다. 인자로 시작 위치와 얻어올 문자열의 길이를 받는다. 알아두면 잘 사용할 수 있을 것 같으니 잊지 않도록 하자!
+ records에서 준 입출력(IN / OUT) 정보는 사용하지 않았다. 코드가 괜히 지저분해진 것 같은 생각이 든다. 다른 사람들의 코드를 좀 더 살펴봐야 겠다.
Comments