백준 19583 - 싸이버개강총회

Updated:

Java

19583 번 - 싸이버개강총회

문제

접근 방법

주어진 시간인 “HH:MM”을 int형 정수로 변환하였다.

  1. 개강 총회 시작한 시간 이전
  2. 총회가 끝나고 스트리밍이 끝나기 전

둘다 충족하는 사람이 있는지 확인하였다.

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);
    }
}

총평

후기

개선할 점