** unique 함수를 사용해 arr.begin() 부터 arr.end() 까지 중복되는 값을 탐색하여
erase하는 방법을 사용하면 한줄로 풀이 가능
vector<int> solution(vector<int> arr)
{
vector<int> answer;
int cur = -1;
for (auto i : arr) {
if (cur == i)
continue;
else
answer.push_back(i);
cur = i;
}
return answer;
}
truck_weights 벡터의 맨 처음 값과 그 트럭이 다리를 통과하는데 걸리는 시간(다리길이 +1) 를 먼저 큐에 삽입
>> 그래야 while 문 돌리기 가능하기 때문
이후 while문 반복을 통해
큐의 맨 앞과의 값을 비교하여 pop,
현재 도로 위의 차량들 무게와 다음 순서의 차량의 무게를 비교하여 push 수행
모든 차량이 지나가면 (q.empty() = true 라면) 반복문 탈출
time 값 리턴
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int sum = 0; // 현재 다리 위의 무게
queue<pair<int, int>> q; // 현재 다리 위 차량 무게, 차량이 다리를 다 건너는 시간
int idx = 0; // 인덱스
int time = 1; // 시간
q.push(make_pair(truck_weights[idx], bridge_length+1));
sum += truck_weights[idx++];
while(!q.empty()){
// 시간 증가
time++;
// (time == 맨 앞 차량이 통과하는데 걸리는 시간) 이라면
// q.pop() 으로 도로에서 차량 빼고, sum 에서 해당 차량 무게 제외
if (time == q.front().second) {
sum -= q.front().first;
q.pop();
}
// 다음 차량과 현재 도로위에 있는 차량의 무게를 더한 값 < 도로가 견딜수 있는 무게
// 다음 차량이 도로에 들어갈 수 있다
if (idx< truck_weights.size() && (sum+truck_weights[idx])<= weight) {
// 큐에 차량의 무게, 다 지나가는데 걸리는 소요 시간을 pair로 삽입
q.push(make_pair(truck_weights[idx], bridge_length+time));
// 현재 도로위의 무게 증가, idx값 증가
sum += truck_weights[idx++];
}
}
return time;
}
int gcd(int x, int y) {
int n;
while (y!=0) {
n = x % y;
x = y;
y = n;
}
return x;
}
int lcm(int x, int y) {
return x * y / gcd(x, y);
}
int solution(vector<int> arr) {
int answer = lcm(arr[0], arr[1]);
for (int i = 2; i < arr.size(); i++)
answer = lcm(arr[i], answer);
return answer;
}
1. 차 번호를 key, 해당 차량이 드나든 시간 vector를 value로 갖는 car변수에 차 번호와 시간정보 저장
2. 차 번호와 해당 차량의 요금 정보를 pair로 갖는 carNum에 (차 번호, 0) 의 값을 pair로 저장
3. car에 담긴 시간 정보를 바탕으로 총 이용시간 산출
4. 산출된 시간정보를 바탕으로 feeCal함수를 사용하여 요금 정보 산출
5. 산출된 요금 정보를 carNum의 second value로 입력
6. 해당 값을 answer vector에 push_back
// 주차장에 머무른 총 시간을 계산하는 함수
int timeCal(string t, string tn) {
int result=0;
int h = stoi(t.substr(0, 2));
int m = stoi(t.substr(3, 2));
int hn = stoi(tn.substr(0, 2));
int mn = stoi(tn.substr(3, 2));
result = ((hn - h)*60) + (mn - m);
return result;
}
// 시간 정보를 받아 요금을 계산하는 함수
int feeCal(int baseTime, int baseFee, int unitTime, int unitFee, int time) {
int result=0;
if (time > baseTime) {
if((time - baseTime) % unitTime != 0)
return (((time - baseTime) / unitTime)+1) * unitFee + baseFee;
else
return ((time - baseTime) / unitTime) * unitFee + baseFee;
}
else
return baseFee;
}
vector<int> solution(vector<int> fees, vector<string> records) {
vector<int> answer;
map<string, vector<string>> car;
set<pair<string, int>> carNum;
for (auto i : records) {
car[i.substr(6, 4)].push_back(i.substr(0, 5));
carNum.insert(make_pair(i.substr(6, 4), 0));
}
for (auto i : carNum) {
string s = i.first;
int x = car[s].size();
if (x % 2 != 0)
car[s].push_back("23:59");
}
for (auto i : carNum) {
string s = i.first;
int t = 0;
for (int j = 0; j < car[s].size()-1; j+=2) {
int time = timeCal(car[s][j], car[s][j + 1]);
t += time;
}
answer.push_back(feeCal(fees[0], fees[1], fees[2], fees[3], t));
}
return answer;
}
bool isPrime(long long num) {
if(num < 2) return false;
for(int i=2; i<=sqrt(num); ++i)
if(num % i == 0) return false;
return true;
}
int solution(int n, int k) {
int t=1, num =1;
int x=0, cnt = 0;
long long val = 0;
string result = "";
while (t <= n)
t *= k;
do {
t /= k;
num = n / t;
result += to_string(num);
n -= num * t;
} while (t>= k);
reverse(result.begin(), result.end());
result += '0';
for (long long i = 0; i < result.size();++i) {
if (result[i] == '0') {
if (isPrime(val))
cnt++;
result.erase(0, i + 1);
i = -1;
val = 0;
}
else
val = val + pow(10, i) * (result[i] - '0');
}
return cnt;
}