ddubi

백준 19583 : 사이버 개강총회 (java) 본문

코테 문제풀이

백준 19583 : 사이버 개강총회 (java)

ddubi__ 2022. 10. 21. 09:43

https://www.acmicpc.net/problem/19583

19583번: 싸이버개강총회

첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는

www.acmicpc.net


  • 풀이

출석체크를 하기 위해서는
1. 개총 시작전에 채팅기록이 있어야하고
2. 개총 끝난 후~스트리밍을 끄기 전 채팅기록이 있어야 한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;

public class back_19583 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String timeMap[] = br.readLine().split(" ");
		String start = timeMap[0]; // 개강총회 시작시간
		String end = timeMap[1]; // 개강총회 끝나는시간
		String close = timeMap[2]; // 스트리밍 종료시간
	
		HashSet<String> enterName = new HashSet<String>(); // 입실 체크
		HashSet<String> leaveName = new HashSet<String>(); // 퇴실 체크
		HashSet<String> nameSet = new HashSet<String>(); // 채팅한 이름
		
		String str = null;
		while((str = br.readLine()) != null){
			String[] temp = br.readLine().split(" ");
			String time = temp[0];
			String name = temp[1];
			
			// 채팅했으니 이름 저장
			nameSet.add(name);
			// 시작시간보다 이른 시간에 채팅했다면 입실체크
			if(time.compareTo(start)<=0) enterName.add(name);
			// 개총 끝나는시간보다 늦은시간 && 스트리밍종료시간보다 이른시간에 채팅했다면 퇴실체크
			else if(time.compareTo(end)>=0 && time.compareTo(close)<=0) leaveName.add(name);
		}
		
		// 출석체크
		int count = 0;
		for(String name : nameSet) {
			if(enterName.contains(name) && leaveName.contains(name)) {
				count ++;
			}
		}
		System.out.println(count);
	}
}
Comments