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

이지환·2024년 2월 27일

알고리즘(백준) 💻

목록 보기
45/80
post-thumbnail

📌 문제

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

🦧 문제 풀이 접근

개강총회 전에 출석을 한 사람들의 ID를 Set_1에 넣는다.
그 후 개강총회가 끝나고 스트리밍이 끝나기 전에 출석을 한 사람들의 ID를 Set_1에서 찾은 후 있다면 Set_2에 넣는다.
Set_2의 크기가 정답이다.
시간에 경우 ':'을 제거한 후 정수형으로 변환하여서 사용하였다.
ex)22:30 -> 2230

💻 code

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을 이용해 간편하게 출석 체크를 하는것이 이 문제의 포인트이다.

profile
takeitEasy

0개의 댓글