https://www.acmicpc.net/problem/19583
1. 아이디어
String의 compareTo 메서드와 Set 자료구조를 통해 출석이 확인된 학회원의 수를 구할 수 있다.
2. 문제풀이
HH:MM 형식의 문자열은 String의 compareTo 메서드로 비교를 하면 시간순(사전순)으로 비교할 수 있다. 이를 활용해서 채팅이 출석 기준이 되는 시간에 기록된 채팅인지 파악했다. 개강총회 시작 전에 채팅 기록을 남긴 학회원을 entry에 담고, 개강총회를 끝내고 나서 스트리밍을 끝낼 때까지 채팅 기록을 남긴 학회원을 exit에 담은 후 retainAll 메서드로 교집합을 구해서 크기를 출력하는 방식으로 구현했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String S = st.nextToken();
String E = st.nextToken();
String Q = st.nextToken();
Set<String> entry = new HashSet<>();
Set<String> exit = new HashSet<>();
String input;
while ((input = br.readLine()) != null) {
st = new StringTokenizer(input);
String time = st.nextToken();
String name = st.nextToken();
if (before(time, S)) {
entry.add(name);
} else if (after(time, E) && before(time, Q)) {
exit.add(name);
}
}
entry.retainAll(exit);
System.out.println(entry.size());
}
private static boolean before(String time, String criterion) {
return time.compareTo(criterion) <= 0;
}
private static boolean after(String time, String criterion) {
return time.compareTo(criterion) >= 0;
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 7785번 - 회사에 있는 사람 [Java] (0) | 2024.12.23 |
---|---|
[백준] 20166번 - 문자열 지옥에 빠진 호석 [Java] (0) | 2024.12.23 |
[백준] 13414번 - 수강신청 [Java] (0) | 2024.12.23 |
[백준] 1431번 - 시리얼 번호 [Java] (1) | 2024.12.23 |
[백준] 1351번 - 무한 수열 [Java] (0) | 2024.12.23 |