일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 123만들기
- 5427번
- 정리
- 백준
- 자바스크립트
- node.js
- 1969번
- 20365번
- 16953번
- 타입스크립트 프로그래밍
- 맥주마시면서걸어가기
- 풀이
- 6593번
- 나이트의이동
- 2503번
- 20300번
- 2422번
- 5014번
- 1926번
- 1541번
- 타입스크립트
- 7526번
- javascript
- 17626번
- 13913번
- 알고리즘
- 토마토
- 16439번
- 14940번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
Archives
- Today
- Total
Sqsung DevLog
[백준] 19583번: 싸이버개강총회 (Node.js) 본문
1. 문제
19583번: 싸이버개강총회
첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는
www.acmicpc.net
2. 풀이
const [info, ...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [START, END, LIVE_END] = info.split(' ').map(val =>
val.split(':').map(val => +val).reduce((a, c) => a * 100 + c)
);
const attendance = {};
input.forEach(chat => {
const [time, nickname] = chat.split(' ');
const _time = time.split(':').map(val => +val).reduce((a, c) => a * 100 + c);
if (_time <= START) attendance[nickname] = 'Attended';
if (_time >= END && _time <= LIVE_END && attendance[nickname]) attendance[nickname] = 'Stayed';
});
console.log(Object.values(attendance).filter(res => res === 'Stayed').length);
2-1. 풀이 설명
입력 값으로 전달받은 채팅 정보를 순회하면서 시간과 닉네임을 분리한 후 개강총회 시작 전 채팅을 남긴 유저의 닉네임을 key로 attendance 객체에 프로퍼티를 만들고, 값을 Attended로 초기화했다.
이미 attendnace 객체에 포함되어 있는 유저이면서, 개강총회 종료 시간 이후, 라이브 송출 종료 시간 전 채팅을 남긴 유저의 경우 attendance 객체의 값을 Stayed로 변경했다.
마지막에 Stayed 값을 가진 프로퍼티의 수를 출력했다.
2-2. 회고
시간 정보는 hr * 100 + min 형태로 관리했다. 처음에는 시/분 정보를 숫자 타입으로만 변환해서 사용했는데, 이러니까 시간을 비교하는 과정에서 조건문을 쓰는 과정이 너무 고통스러워졌다.
'Algorithm' 카테고리의 다른 글
[백준] 1697번: 숨바꼭질 - Node.js (자바스크립트) (0) | 2023.05.22 |
---|---|
[백준] 14425번: 문자열 집합 (Node.js) (0) | 2023.05.19 |
[백준] 2644번: 촌수계산 (Node.js) (1) | 2023.05.18 |
[백준] 4358번: 생태학 (Node.js) (0) | 2023.05.18 |
[백준] 1021번: 회전하는 큐 (Node.js) (1) | 2023.05.17 |