Created
November 17, 2015 14:59
-
-
Save jungheelee/47582a192e6211971a21 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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