본문 바로가기

문제 풀이/Baekjoon

[백준] S5 7785번 회사에 있는 사람 (JAVA)

문제 출처 - Baekjoon Online Judge

문제는 여기

 

7785번: 회사에 있는 사람

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

www.acmicpc.net

[문제] 

상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.

각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.

상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.

[입력]

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

회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.

[출력]

현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다.

 

 


[풀이]

1. 해쉬셋을 사용해 출입 상황에 따라 저장, 삭제를 해준다.

2. 해쉬셋의 정보를 리스트에 담아준다.

3. 리스트를 정렬시키고 뒤에서부터 출력시킨다. (사전 역순 출력)

[접근]

1. 해쉬셋을 통해 저장을 시킨다.

2. 해쉬셋에 남아있는 내용을 리스트에 저장시킨다.

[코드]

package BOJ_silver;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main_S5_7785 {
	static int n;
	static HashSet<String> log;
	static ArrayList<String> list;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		n = Integer.parseInt(br.readLine());
		log = new HashSet<>();
		list = new ArrayList<>();
		
		for (int i = 0; i < n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String name = st.nextToken(); // 이름
			String status = st.nextToken(); // enter or leave의 상태
			
			// 만약 enter라면 해쉬셋에 저장
			if (status.compareTo("enter") == 0) {
				log.add(name);
			}
			else {
				if (log.contains(name)) // 있는지 체크하고
					log.remove(name); // 있다면 제거
			}
		}
		// 리스트에 해쉬 내용을 담아준다.
		list = new ArrayList(log);
		// 정렬 시키기
		Collections.sort(list);
		
		// 사전 역순으로 출력
		for (int i = list.size() - 1; i >= 0; i--) {
			System.out.println(list.get(i));
		}
	}
}