⚡문제정보



진짜 무서운 점 저게 문제 다 가져온것도아님
문제가 너무너무너무너무너무너무 길고 조건도 세세하지만
귀찮을 뿐.. 어렵지는 않은 조건입니다.
주의할 조건들만 아래에 간략히 적겠습니다.
🙄제한사항
1. 주차요금 계산할때 시간이 딱 안떨어지면 올림해서 계산하세요
2. 입차한 데이터는 있는데 출차한 데이터가 없다면 23:59에 나간걸로 취급하세요
3. 기본시간,요금,단위시간,단위요금은 달라집니다.
4. 답은 차량번호를 오름차순으로 만들어서 그 순서로 반환하세요
5. 같은 차량이 여러번 들어왔다 나갈 수 있습니다.
주의해야할 조건들은 이정도인 것 같습니다.
굉장히...세세하네요
🔍접근방법
Map을 때려넣는다.
🔍나의 풀이
function solution(fees, records) {
let map = new Map()
let answer = []
for(i=0 ; i<records.length ; i++) {
let sp = records[i].split(" ")
let timesp = sp[0].split(":")
let time = (Number(timesp[0])*60) + Number(timesp[1])
if(!map.get(sp[1])) map.set(sp[1] , [])
map.get(sp[1]).push([sp[2], time])
}
let sortmap = new Map([...map].sort((a,b) => a[0] - b[0]))
sortmap.forEach( (value,key,i) => {
let count = 0
for(i=0; i<value.length; i++) {
let val = 0
if(value[i][0] == "IN" && value?.[i+1]?.[0] == "OUT") {
val += value[i+1][1] - value[i][1]
}
else if(value[i][0] == "IN" && value?.[i+1]?.[0] != "OUT"){
val += 1439 - value[i][1]
}
count += val
}
let result = ( Math.ceil(Math.max(0, count - fees[0])/fees[2]) * fees[3])
answer.push(result + fees[1])
})
return answer
}
설명은 다음과 같습니다.
function solution(fees, records) {
let map = new Map()
let answer = []
// 답을 저장할 배열과 데이터를 저장할 map
for(i=0 ; i<records.length ; i++) {
let sp = records[i].split(" ")
let timesp = sp[0].split(":")
let time = (Number(timesp[0])*60) + Number(timesp[1])
if(!map.get(sp[1])) map.set(sp[1] , [])
map.get(sp[1]).push([sp[2], time])
}
// 각 요소를 쪼개주고 시간을 분으로 바꿔서 저장해줍니다.
//만약 처음 만나는 차량번호면 빈배열을 먼저 set해줍니다.
let sortmap = new Map([...map].sort((a,b) => a[0] - b[0]))
// 차량번호를 오름차순으로 해야하기때문에 sort해줍니다.
// sort를 하려면 array로 만들어야해서 array로 만들어주고 다시 map에 넣었어요
// 늦게 발견한 조건이라 중간에 우겨넣음;
sortmap.forEach( (value,key,i) => {
let count = 0
// 각 배열의 요소에 forEach로 접근합니다.
for(i=0; i<value.length; i++) {
let val = 0
if(value[i][0] == "IN" && value?.[i+1]?.[0] == "OUT") {
val += value[i+1][1] - value[i][1]
}
else if(value[i][0] == "IN" && value?.[i+1]?.[0] != "OUT"){
val += 1439 - value[i][1]
}
count += val
}
// in out 데이터가 다 있으면 out - in 을 해주고
// in한 흔적만 있으면 23:59 - in시간을 해서 할당합니다.
let result = ( Math.ceil(Math.max(0, count - fees[0])/fees[2]) * fees[3])
// 주차요금 계산 방식을 요구사항에 맞게 만들어줍니다.
answer.push(result + fees[1])
// 정답 배열에 주차요금 계산 방식으로 얻은 값과 기본요금을 더해서 push
})
return answer
}
?. 은 옵셔널체이닝연산자입니다.
만약 i+1이 없다면 오류가 발생하기때문에 이를 방지해주기 위해서
옵셔널체이닝연산자를 붙여줬습니다.
🔍다른사람의 풀이
function solution(fees, records) {
const parkingTime = {};
records.forEach(r => {
let [time, id, type] = r.split(' ');
let [h, m] = time.split(':');
time = (h * 1) * 60 + (m * 1);
if (!parkingTime[id]) parkingTime[id] = 0;
if (type === 'IN') parkingTime[id] += (1439 - time);
if (type === 'OUT') parkingTime[id] -= (1439 - time);
});
const answer = [];
for (let [car, time] of Object.entries(parkingTime)) {
if (time <= fees[0]) time = fees[1];
else time = Math.ceil((time - fees[0]) / fees[2]) * fees[3] + fees[1]
answer.push([car, time]);
}
return answer.sort((a, b) => a[0] - b[0]).map(v => v[1]);
}
아 맞다 구조분해 할당
구조분해할당하면 깔끔했는데 항상 코드 짤때는 생각을 못하네요
'programmers' 카테고리의 다른 글
[Programmers Level 2] 스킬트리 Javascript (0) | 2023.01.11 |
---|---|
[Programmers Level 1] 개인정보 수집 유효기간 Javascript (0) | 2023.01.11 |
[Programmers Level 2] 할인 행사 Javascript (0) | 2023.01.11 |
[Programmers Level 2] 괄호 회전하기 Javascript (0) | 2023.01.11 |
[Programmers Level 3] 베스트 앨범 Javascript (0) | 2023.01.08 |
⚡문제정보



진짜 무서운 점 저게 문제 다 가져온것도아님
문제가 너무너무너무너무너무너무 길고 조건도 세세하지만
귀찮을 뿐.. 어렵지는 않은 조건입니다.
주의할 조건들만 아래에 간략히 적겠습니다.
🙄제한사항
1. 주차요금 계산할때 시간이 딱 안떨어지면 올림해서 계산하세요
2. 입차한 데이터는 있는데 출차한 데이터가 없다면 23:59에 나간걸로 취급하세요
3. 기본시간,요금,단위시간,단위요금은 달라집니다.
4. 답은 차량번호를 오름차순으로 만들어서 그 순서로 반환하세요
5. 같은 차량이 여러번 들어왔다 나갈 수 있습니다.
주의해야할 조건들은 이정도인 것 같습니다.
굉장히...세세하네요
🔍접근방법
Map을 때려넣는다.
🔍나의 풀이
function solution(fees, records) {
let map = new Map()
let answer = []
for(i=0 ; i<records.length ; i++) {
let sp = records[i].split(" ")
let timesp = sp[0].split(":")
let time = (Number(timesp[0])*60) + Number(timesp[1])
if(!map.get(sp[1])) map.set(sp[1] , [])
map.get(sp[1]).push([sp[2], time])
}
let sortmap = new Map([...map].sort((a,b) => a[0] - b[0]))
sortmap.forEach( (value,key,i) => {
let count = 0
for(i=0; i<value.length; i++) {
let val = 0
if(value[i][0] == "IN" && value?.[i+1]?.[0] == "OUT") {
val += value[i+1][1] - value[i][1]
}
else if(value[i][0] == "IN" && value?.[i+1]?.[0] != "OUT"){
val += 1439 - value[i][1]
}
count += val
}
let result = ( Math.ceil(Math.max(0, count - fees[0])/fees[2]) * fees[3])
answer.push(result + fees[1])
})
return answer
}
설명은 다음과 같습니다.
function solution(fees, records) {
let map = new Map()
let answer = []
// 답을 저장할 배열과 데이터를 저장할 map
for(i=0 ; i<records.length ; i++) {
let sp = records[i].split(" ")
let timesp = sp[0].split(":")
let time = (Number(timesp[0])*60) + Number(timesp[1])
if(!map.get(sp[1])) map.set(sp[1] , [])
map.get(sp[1]).push([sp[2], time])
}
// 각 요소를 쪼개주고 시간을 분으로 바꿔서 저장해줍니다.
//만약 처음 만나는 차량번호면 빈배열을 먼저 set해줍니다.
let sortmap = new Map([...map].sort((a,b) => a[0] - b[0]))
// 차량번호를 오름차순으로 해야하기때문에 sort해줍니다.
// sort를 하려면 array로 만들어야해서 array로 만들어주고 다시 map에 넣었어요
// 늦게 발견한 조건이라 중간에 우겨넣음;
sortmap.forEach( (value,key,i) => {
let count = 0
// 각 배열의 요소에 forEach로 접근합니다.
for(i=0; i<value.length; i++) {
let val = 0
if(value[i][0] == "IN" && value?.[i+1]?.[0] == "OUT") {
val += value[i+1][1] - value[i][1]
}
else if(value[i][0] == "IN" && value?.[i+1]?.[0] != "OUT"){
val += 1439 - value[i][1]
}
count += val
}
// in out 데이터가 다 있으면 out - in 을 해주고
// in한 흔적만 있으면 23:59 - in시간을 해서 할당합니다.
let result = ( Math.ceil(Math.max(0, count - fees[0])/fees[2]) * fees[3])
// 주차요금 계산 방식을 요구사항에 맞게 만들어줍니다.
answer.push(result + fees[1])
// 정답 배열에 주차요금 계산 방식으로 얻은 값과 기본요금을 더해서 push
})
return answer
}
?. 은 옵셔널체이닝연산자입니다.
만약 i+1이 없다면 오류가 발생하기때문에 이를 방지해주기 위해서
옵셔널체이닝연산자를 붙여줬습니다.
🔍다른사람의 풀이
function solution(fees, records) {
const parkingTime = {};
records.forEach(r => {
let [time, id, type] = r.split(' ');
let [h, m] = time.split(':');
time = (h * 1) * 60 + (m * 1);
if (!parkingTime[id]) parkingTime[id] = 0;
if (type === 'IN') parkingTime[id] += (1439 - time);
if (type === 'OUT') parkingTime[id] -= (1439 - time);
});
const answer = [];
for (let [car, time] of Object.entries(parkingTime)) {
if (time <= fees[0]) time = fees[1];
else time = Math.ceil((time - fees[0]) / fees[2]) * fees[3] + fees[1]
answer.push([car, time]);
}
return answer.sort((a, b) => a[0] - b[0]).map(v => v[1]);
}
아 맞다 구조분해 할당
구조분해할당하면 깔끔했는데 항상 코드 짤때는 생각을 못하네요
'programmers' 카테고리의 다른 글
[Programmers Level 2] 스킬트리 Javascript (0) | 2023.01.11 |
---|---|
[Programmers Level 1] 개인정보 수집 유효기간 Javascript (0) | 2023.01.11 |
[Programmers Level 2] 할인 행사 Javascript (0) | 2023.01.11 |
[Programmers Level 2] 괄호 회전하기 Javascript (0) | 2023.01.11 |
[Programmers Level 3] 베스트 앨범 Javascript (0) | 2023.01.08 |