[백준] 19583 싸이버개강총회 - javascript

Yongwoo Cho·2022년 2월 9일
0

알고리즘

목록 보기
62/104
post-thumbnail

📌 문제

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

profile
Frontend 개발자입니다 😎

0개의 댓글