
알고리즘 분류 : 문자열
난이도 : 실버2
출처 : 백준 - 싸이버개강총회





개강총회 전에 출석을 한 사람들의 ID를 Set_1에 넣는다.
그 후 개강총회가 끝나고 스트리밍이 끝나기 전에 출석을 한 사람들의 ID를 Set_1에서 찾은 후 있다면 Set_2에 넣는다.
Set_2의 크기가 정답이다.
시간에 경우 ':'을 제거한 후 정수형으로 변환하여서 사용하였다.
ex)22:30 -> 2230
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
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(),": ");
Set<String> clockIn = new HashSet<>();
Set<String> clockOut = new HashSet<>();
int S = Integer.parseInt(st.nextToken()+st.nextToken());//개총 시작전
int E = Integer.parseInt(st.nextToken()+st.nextToken());//개총 끝
int Q = Integer.parseInt(st.nextToken()+st.nextToken());//스밍 끝
String log = null;
while((log = br.readLine()) != null) {
st = new StringTokenizer(log,": ");
int time = Integer.parseInt(st.nextToken()+st.nextToken());
String ID = st.nextToken();
if(time<=S)
clockIn.add(ID);
else if(E<=time && time<=Q && clockIn.contains(ID))
clockOut.add(ID);
}
System.out.println(clockOut.size());
}
}

시간 문자값을 잘 파싱하고 Set을 이용해 간편하게 출석 체크를 하는것이 이 문제의 포인트이다.