백준 19583 - 싸이버개강총회
Updated:
Java
19583 번 - 싸이버개강총회
문제
접근 방법
주어진 시간인 “HH:MM”을 int형 정수로 변환하였다.
- 개강 총회 시작한 시간 이전
 - 총회가 끝나고 스트리밍이 끝나기 전
 
둘다 충족하는 사람이 있는지 확인하였다.
HashSet<>()을 사용하였으며,
총회 시작 이전의 사람들을 Set에 넣고,
총회 종료 이후, 스트리밍이 끝나기 전 사람들이 해당 Set에 존재하는지 확인하였다.
또한 중복을 방지하기 위해, 확인 후 Set에서 해당 인원을 제거해주었다.
코드
import java.util.*;
import java.io.*;
public class Main {
	static int n, result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk = new StringTokenizer(br.readLine());
    	int startT = convertTime(stk.nextToken());
    	int endT = convertTime(stk.nextToken());
    	int endS = convertTime(stk.nextToken());
    	int time;
    	String input, name;
    	Set<String> set = new HashSet<>();
    	while((input = br.readLine()) != null) {
    		stk = new StringTokenizer(input);
    		if(!stk.hasMoreTokens())
    			break;
    		time = convertTime(stk.nextToken());
    		name = stk.nextToken();
    		if(time <= startT) {
    			set.add(name);
    		}
    		else if(endT <= time && time <= endS) {
    			if(set.contains(name)) {
    				set.remove(name);	// 중복하여 채팅 치는 것을 방지
    				result++;
    			}
    		}
    	}
    	System.out.println(result);
    	br.close();
	}
	// 문자열을 시간으로 변경
	static int convertTime(String str) {
		int time = 0;
		String[] sp = str.split(":");
		time += stoi(sp[0]) * 60;	// hour
		time += stoi(sp[1]);		// min
		return time;
	}
	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}
