https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제에서 제시한 대로 풀면 어렵지 않게 풀 수 있었다.
string을 int로 바꿀줄 알고 배열의 인덱스를 활용할 줄 아는 것이 중요한것 같다.
풀이
1. 입력에서 입차시간, 차의 번호를 int로 바꿔주고 배열에 저장해준다.
ex) 9876번이 5:34분에 들어왔다면 분으로 바꾸어서 이렇게 저장해준다. num[9876] = 334; 05:34
2.이미 num에 값이 있다는 것은 입차를 한 차이기 때문에 <출차시간-num[차번호]> 해서 머무른 분을 구해 totalF에 넣어준다.
3.출차를 안한 차는 11:59분에 출차한다고 간주하기 때문에 num에 값이 남아있는 차는 추가로 시간을 계산하서 totalF에 넣어준다.
4.구한 누적시간하고 요금표를 이용하여 차의 주차요금을 계산한다.(배열의 인덱스를 0~9999처럼 오름차순으로 증가하면서 계산하기 때문에 차량 번호가 작은 자동차부터 출력할 수 있다. )
* 주의할 부분: 0시에 들어오는 차량도 있기 때문에 num을 0으로 초기화 하면 0시에 들어오는 차량이 구별이 안된다.
그래서 <cstring> 헤더의 memset을 이용하여 num을 -1로 초기화 해주었다.
#include <string>
#include <vector>
#include<iostream>
#include<cstring>
using namespace std;
int h,fee,unitH,unitF;
int num[10000];//0000~9999 num[9876] = 334; 05:34
int totalF[10000]; //누적 시간
string temp;
int tH,tN;
void str(vector<string> &records)
{
int size=records.size();
for(int i=0;i<size;i++)
{
temp=records[i];
tH =((temp[0]-'0')*10+(temp[1]-'0'))*60 +(temp[3]-'0')*10+(temp[4]-'0');
tN =(temp[6]-'0')*1000+(temp[7]-'0')*100+(temp[8]-'0')*10+(temp[9]-'0');
if(num[tN]!=-1)//입차 한 기록이 있다면
{
totalF[tN]+=(tH-num[tN]);//시간을 계산하고
num[tN]=-1;//초기화
}
else//없다면
{
num[tN]=tH;
}
}
}
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
h=fees[0];
fee=fees[1];
unitH=fees[2];
unitF=fees[3];
memset(num,-1,sizeof(num));
str(records);
//입차하고 출차 안한 차의 시간 구하기
int out=1439;//11:59분 출차 간주
for(int i=0;i<10000;i++)
{
if(num[i]>-1)
{
totalF[i]+=(out-num[i]);
}
}
//시간 계산 한 것으로 주차요금 계산
int tempF;
for(int i=0;i<10000;i++)
{
if(!totalF[i])
continue;
//cout<<h<<" "<<totalF[i]<<endl;
if(totalF[i]<=h)
answer.push_back(fee);
else
{
tempF= (totalF[i]-h)/unitH;
if((totalF[i]-h)%unitH)//나누어 떨어지지 않으면
tempF++;
tempF=(fee + tempF * unitF);//주차요금
answer.push_back(tempF);
}
}
//차량 번호가 작은 자동차부터 청구할 주차 요금 return
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 입국심사 c++ (0) | 2023.01.29 |
---|---|
[프로그래머스] 더 맵게 / 힙(Heap) c++ (0) | 2023.01.20 |
[프로그래머스] 스킬트리 c++ (0) | 2023.01.15 |
[프로그래머스] k진수에서 소수 개수 구하기 c++ (0) | 2023.01.14 |
[프로그래머스] [1차] 캐시 c++ (0) | 2023.01.06 |