JAVA/Coding Test

[JAVA] 백준 19583 싸이버 개강총회

오늘도개발 2024. 5. 29. 18:46

 

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

 

접근 : 

 

 - 개강시간 전 입력된 메시지 -> 출석 체크인 에 등록(Set)

 

 - 스트리밍 끝난 후 메시지 -> break 시간 순으로 정렬되어 있으므로 더 이상 확인 필요 X

 

 - 총회 끝나기 전 입력된 메시지 -> 특별한 의미가 없으므로 continue 

 

 - 총회 끝난 후 부터 스트리밍 끝나기 전 메시지 -> set 을 확인 하면서 출석체크(출석 체크가 끝난 닉네임은 set 에서 제거)

 

 

코드구현 

 

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));
        String[] times = br.readLine().split(" "); 
        String input;
        Set<String> check_in = new HashSet<>();
        int ans = 0;

        while((input = br.readLine()) != null){
            String[] msg = input.split(" ");

            //스트리밍이 끝난 후 채팅 기록은 더 이상 확인 X
            if(times[2].compareTo(msg[0]) < 0) break;

            //시작 전 채팅일 경우 체크인
            if(times[0].compareTo(msg[0]) >= 0){
                check_in.add(msg[1]);
                continue;
            }

            //총회 시간은 지나감
            if(times[1].compareTo(msg[0]) > 0) continue;
            
            // 체크 아웃 확인 시간
            if(check_in.contains(msg[1])){
                ans++;
                check_in.remove(msg[1]);
            }
        }
        System.out.println(ans);
    }
}