Skip to content

Instantly share code, notes, and snippets.

@jungheelee
Created November 17, 2015 14:59
Show Gist options
  • Save jungheelee/47582a192e6211971a21 to your computer and use it in GitHub Desktop.
Save jungheelee/47582a192e6211971a21 to your computer and use it in GitHub Desktop.
/**
* Created by may on 2015-11-17.
통화 금액 책정
1. 5분 이하 통화는 초당 3센트 책정
2. 5분초과 분당 150센트(초당2.5센트) 책정
3. 누적 통화시간이 제일 긴 번호는 공짜 (프로모션)
기타: 총 통화 시간이 동일한 번호들의 경우, 번호들을 각각 금액산정하여
가장 적은 할인이 발생한 번호만 무료이고 나머지 번호들은 할인 프로모션만 적용한다
*/
var log = '00:04:53,300-112-090\n00:01:07,400-234-090\n00:05:01,701-080-080\n00:04:53,400-234-090'
+ '\n00:04:53,400-234-090\n00:05:00,500-234-081\n00:04:53,400-234-090\n00:05:01,701-080-080'
+ '\n00:04:53,400-234-090\n00:05:00,500-234-081\n00:04:53,400-234-090\n00:05:01,701-080-080'
+ '\n00:04:53,300-112-090\n00:05:00,500-234-081\n00:04:53,500-234-081\n00:05:39,500-234-081';
solution(log);
function solution(S) {
var logArr = S.split('\n');
var promotionNumber = [];
var number = '';
var time = '';
var callObj = {};
//번호별로 총 통화 시간을 누적시킨다.
for (var i = 0; i < logArr.length; i++) {
number = logArr[i].split(',')[1];
time = logArr[i].split(',')[0];
if (callObj.hasOwnProperty(number)) {
time = sumTimes(callObj, number, time);
}
callObj[number] = time;
}
var keyArr = Object.keys(callObj);
promotionNumber.push(Object.keys(callObj)[0]); //기본 1개 넣어둠
//누적 통화 시간이 가장 긴 번호를 배열에 담는다
for (var i = 0; i < keyArr.length; i++) {
for(var k = 0; k < promotionNumber.length; k++) {
//이미 담겨있는 번호는 비교하지 않는다
if(promotionNumber[k] == keyArr[i]) {
continue;
} else {
var temp1 = callObj[promotionNumber[k]].split(':');
var temp2 = callObj[keyArr[i]].split(':');
//담겨있던 번호의 통화 시간
var dt1 = new Date(0, 0, 0, Number(temp1[0]), Number(temp1[1]), Number(temp1[2]));
//비교할 번호의 통화 시간
var dt2 = new Date(0, 0, 0, Number(temp2[0]), Number(temp2[1]), Number(temp2[2]));
if ((dt2-dt1) > 0) {
promotionNumber.pop();
promotionNumber.push(keyArr[i]);
}
if((dt2-dt1) == 0) {
promotionNumber.push(keyArr[i]);
}
}
}
}
//누적 통화 시간이 가장 긴 번호가 1개 초과일 경우 기타 조건을 거친다.
if (promotionNumber.length > 1) {
var deleteNumber = promotion(callObj, promotionNumber);
//console.log(deleteNumber);
delete callObj[deleteNumber];
}
//번호별 통화기록
console.log(callObj);
//누적 통화 시간이 가장 긴 전화번호
console.log(promotionNumber);
return charge(callObj);
}
//통화 시간을 합산
function sumTimes(obj, number, time) {
var before = obj[number].split(':');
var timeArr = time.split(':');
var beforeDate = new Date(0, 0, 0, Number(before[0]), Number(before[1]), Number(before[2]));
var tempDate = new Date(0, 0, 0, Number(timeArr[0]), Number(timeArr[1]), Number(timeArr[2]));
var newDate = new Date(0, 0, 0
, beforeDate.getHours() + tempDate.getHours()
, beforeDate.getMinutes() + tempDate.getMinutes()
, beforeDate.getSeconds() + tempDate.getSeconds());
return newDate.getHours() + ':' + newDate.getMinutes() + ':' + newDate.getSeconds();
}
//무료 통화 프로모션에 해당하는 번호들의 청구 금액을 각각 산정하고, 가장 적은 할인을 받은 번호를 돌려준다.
function promotion(callObj, promotionNumber) {
return '';
}
//금액을 산정한다.
function charge(callObj) {
var sum = void 0;
return sum;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment