Algorithm/백준(BOJ)
[백준] 19583. 싸이버개강총회 (Java)
Carroti
2022. 9. 19. 20:26
🔒 문제
19583번: 싸이버개강총회
첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는
www.acmicpc.net
🔑 알고리즘
해시셋(HashSet)
💡 풀이
00:00 와 S 사이에, 그리고 E 와 Q 사이에 채팅을 친 사람의 수를 카운트해야한다.
시간이 00:00~23:59 까지 주어지므로 시각을 숫자로 0 ~ 2359로 바꾸고,
채팅을 친 시각이 0 와 S 사이에 있으면 해시셋에 넣고,
채팅을 친 시각이 E 와 Q 사이에 있으면 해시셋에 이름이 있는지 확인하고 있으면 조건을 만족하므로 count를 1 증가시킨다.
이때 똑같은 사람이 여러번 카운트되지 않도록 count를 증가시킨 후에 셋에서 제거한다.
✏️ 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashSet<String> set = new HashSet<>();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int S = Integer.parseInt(st.nextToken().replace(":",""));
int E = Integer.parseInt(st.nextToken().replace(":",""));
int Q = Integer.parseInt(st.nextToken().replace(":",""));
String input = "";
int count = 0;
while((input = br.readLine()) != null && !input.isEmpty()) {
st = new StringTokenizer(input);
int T = Integer.parseInt(st.nextToken().replace(":", ""));
String name = st.nextToken();
if(T<=S)
set.add(name);
if(E<=T && T<=Q && set.contains(name)) {
count++;
set.remove(name);
}
}
System.out.println(count);
}
}