https://www.acmicpc.net/problem/19583
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
let [start, end, finish] = input
.shift()
.trim()
.split(" ")
.map((element) =>
element
.split(":")
.map(Number)
.reduce((a, b) => a * 100 + b)
);
let set = new Set();
let ans = 0;
for (const chat of input) {
const [time, user] = chat.trim().split(" ");
const curTime = time
.split(":")
.map(Number)
.reduce((a, b) => a * 100 + b);
if (curTime <= start) {
set.add(user);
} else if (curTime >= end && curTime <= finish && set.has(user)) {
ans++;
set.delete(user);
}
}
console.log(ans);
✔ 알고리즘 : 구현
✔ 시간계산을 편하게 하기 위해 : 를 구분자로 하여 나누고 시간에 100을 곱한 후 분을 더해주었다.
✔ 중복을 방지하기 위해 set 자료구조를 사용하였다.
✔ 개강총회 시작 전 대화한적이 있는 사용자를 set에 저장한다.
✔ 개강총회가 끝난 후 스트리밍이 종료되기 전까지 대화한적이 있는 사용자가 set에 있으면 ans를 1증가해주고 set에서 해당 사용자를 제거한다.
✔ 난이도 : 백준 기준 실버 1