🔒 문제
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);
}
}
'Algorithm > 백준(BOJ)' 카테고리의 다른 글
[백준] 17103. 골드바흐 파티션 (Java) (0) | 2022.09.20 |
---|---|
[백준] 1351. 무한 수열 (Java) (0) | 2022.09.19 |
[백준] 2910. 빈도 정렬 (Java) (0) | 2022.09.19 |
[백준] 2443. 별 찍기 - 6 (Java) (0) | 2022.09.19 |
[백준] 17142. 연구소 3 (Java) (0) | 2022.09.19 |