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

2022. 1. 4. 13:57알고리즘

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

 

7785번: 회사에 있는 사람

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

www.acmicpc.net


 

문제설명

현재 회사에 있는 사람을 구하는 문제인데, 예를 들면 Baha enter후 Baha leave라는 입력이 들어오면 Baha라는 사람은 퇴근을 한 것이므로 현재 회사에 없다.

즉 enter만 있는 사람들만 현재 회사에 있는 것이다.

 

코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();
		HashMap<String, String> map = new HashMap<String, String>();

		for (int i = 0; i < n; i++) {
			String name = sc.next();
			String state = sc.next();

			if (map.containsKey(name)) {
				map.remove(name);
			} else {
				map.put(name, state);
			}
		}

		ArrayList<String> list = new ArrayList<String>(map.keySet());
		Collections.sort(list, Collections.reverseOrder());
		
		for(var li : list) {
			System.out.print(li + " ");
		}
	}
}

코드설명

코드는 매우 간단하다. 그냥 HashMap key값에 이름들을 넣고 만약에 key 값이 한 번 더 나온다 하면 그 key값을 HashMap에서 삭제하였다.

(여기서 굳이 value값으로 비교할 필요가 없는 게 만약 동일한 key값이 두 번 나왔으면 그거는 무조건 enter 후 leave이므로 key값 포함 여부만 확인하면 된다.)

그러고 나서 ArrayList에 넣어서 사전 순의 역순으로 정렬을 해주고 출력을 하였다.