GitHub 자세히보기

Algorithm/BOJ

[BOJ] 7785번 회사에 있는 사람 for JAVA

devdange 2022. 1. 17. 00:04

 

 

문제 바로가기

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net

 

 

문제풀이

회사원별로 출퇴근 여부를 확인해야하기 때문에 HashMap을 사용하였다.
key는 회사원 이름, value는 출퇴근 여부 boolean 값으로 초기화했다.

  1. 해쉬맵이 회사원 key 값을 가지고 있으면 value값만 다시 지정해준다.
  2. 회사원 key를 가지고 있지 않다면 회사원 정보를 put한다
  3. 만약 출입기록이 'enter'이면 value는 true이고 아니면 false가 되도록 한다.
  4. hashmap 내림차순 정렬
  5. value가 true 일때만 출력 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
	static int N;
	static StringTokenizer st;
	static StringBuilder sb = new StringBuilder();

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		
		HashMap<String, Boolean> officer = new HashMap<String, Boolean>();
		for (int n = 0; n < N; n++) {
			st = new StringTokenizer(br.readLine(), " ");
			String people = st.nextToken();
			boolean isOffice = st.nextToken().equals("enter") ? true : false;
			if(officer.containsKey(people)) {
				officer.replace(people, isOffice);
			}else {
				officer.put(people, isOffice);
			}
		}
		Object[] mapkey = officer.keySet().toArray();
		Arrays.sort(mapkey, Collections.reverseOrder());
		
		for(Object s : mapkey) {
			if(officer.get(s))
				sb.append(s).append("\n");
		}
		
		System.out.println(sb);
	}
}