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

코드설명

해시맵(HashMap)을 활용합니다.

 

입장하는것은 한번만 확인하면 되므로, hashmap.put(name, 1); 로 접속했다는 기록을 남겨둡니다.

만약 채팅을 2번치더라도, 입장은 1번입니다.

 

퇴장하는 것은 만약 이전에 입장한 기록이 hashmap에 존재한다면(hashmap.containsKey(name)== true) 라면, 

기존 입장값에서 -1 을 해줍니다.

이때, 만약 0 이하라면 더 이상 할 필요는 없지만 문제에서 구하는 것은 인원을 구하는 것이기 때문에

손쉽게 음수일경우 개강총회에 참석했다고 하면 됩니다. 

 

처음에 hashmap.containsKey(name)==true)를 하지않고, hashmap.getOrDefault로 입장여부가 없어도 퇴장여부를 넣는 로직을 추가했었는데, containsKey로 입장여부가 있는 경우에만 처리해주어야 합니다.

코드

package Main;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
 
public class Main {
	static int N, M, S, P, K, A, B, X;
	static int answer = 0;
	static int[] arr = new int[3];
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		String str = st.nextToken();
		arr[0] = Integer.parseInt(str.split("[:]")[0]) * 60*60 + Integer.parseInt(str.split("[:]")[1]) * 60;
		str = st.nextToken();
		arr[1] = Integer.parseInt(str.split("[:]")[0]) * 60*60 + Integer.parseInt(str.split("[:]")[1]) * 60;
		str = st.nextToken();
		arr[2] = Integer.parseInt(str.split("[:]")[0]) * 60*60 + Integer.parseInt(str.split("[:]")[1]) * 60;

		HashMap<String, Integer> hashmap = new HashMap<>();
		String input = "";
		while( (input = br.readLine()) != null ) {
			st = new StringTokenizer(input);
			if(!st.hasMoreElements()) break;
			str = st.nextToken();
			String[] strSplit = str.split("[:]");
			//시간대.
			int time = Integer.parseInt(strSplit[0]) * 60 * 60 + Integer.parseInt(strSplit[1]) * 60;
			String name = st.nextToken();
			
			//입장확인여부 확인
			if(time <= arr[0]) {
				hashmap.put(name, 1);
			}
			
			//퇴장확인여부 확인
			if(time >= arr[1] && time <= arr[2]) {
				if(hashmap.containsKey(name) == true) {
					hashmap.put(name, hashmap.get(name) - 1);
				}
			}
		}
		
		
		for(Map.Entry<String, Integer> entrySet : hashmap.entrySet()) {
//			System.out.println("entrySet:"+entrySet.getKey()+"entrySet:"+entrySet.getValue());
			if(entrySet.getValue() <= 0) {
				answer += 1;
			}
		}
		System.out.println(answer);
	}
}

+ Recent posts