[Algorithm] ๐Ÿข๋ฐฑ์ค€ 7785 ํšŒ์‚ฌ์— ์žˆ๋Š” ์‚ฌ๋žŒ

0. ๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ์„ธ๊ณ„์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ํšŒ์‚ฌ ๊ธฐ๊ธ€์—์„œ ์ผํ•œ๋‹ค. ์ด ํšŒ์‚ฌ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์ž์œ ๋กœ์šด ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์ง์›๋“ค์€ ๋ฐ˜๋“œ์‹œ 9์‹œ๋ถ€ํ„ฐ 6์‹œ๊นŒ์ง€ ํšŒ์‚ฌ์— ์žˆ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๊ฐ ์ง์›์€ ์ž๊ธฐ๊ฐ€ ์›ํ•  ๋•Œ ์ถœ๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , ์•„๋ฌด๋•Œ๋‚˜ ํ‡ด๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ๊ทผ์ด๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์ถœ์ž…์นด๋“œ ์‹œ์Šคํ…œ์˜ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด ๋กœ๊ทธ๋Š” ์–ด๋–ค ์‚ฌ๋žŒ์ด ํšŒ์‚ฌ์— ๋“ค์–ด์™”๋Š”์ง€, ๋‚˜๊ฐ”๋Š”์ง€๊ฐ€ ๊ธฐ๋ก๋˜์–ด์ ธ ์žˆ๋‹ค. ๋กœ๊ทธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ˜„์žฌ ํšŒ์‚ฌ์— ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ ์ถœ์ž… ๊ธฐ๋ก์˜ ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (2 โ‰ค n โ‰ค 106) ๋‹ค์Œ n๊ฐœ์˜ ์ค„์—๋Š” ์ถœ์ž… ๊ธฐ๋ก์ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์ด ์ฃผ์–ด์ง€๊ณ  "enter"๋‚˜ "leave"๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. "enter"์ธ ๊ฒฝ์šฐ๋Š” ์ถœ๊ทผ, "leave"์ธ ๊ฒฝ์šฐ๋Š” ํ‡ด๊ทผ์ด๋‹ค.

ํšŒ์‚ฌ์—๋Š” ๋™๋ช…์ด์ธ์ด ์—†์œผ๋ฉฐ, ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์ด๋‹ค. ์‚ฌ๋žŒ๋“ค์˜ ์ด๋ฆ„์€ ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋œ 5๊ธ€์ž ์ดํ•˜์˜ ๋ฌธ์ž์—ด์ด๋‹ค.

์ถœ๋ ฅ
ํ˜„์žฌ ํšŒ์‚ฌ์— ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ์‚ฌ์ „ ์ˆœ์˜ ์—ญ์ˆœ์œผ๋กœ ํ•œ ์ค„์— ํ•œ ๋ช…์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

HashMap ์ด์šฉ
๐Ÿ’ก name์„ key๊ฐ’์œผ๋กœ, (enter, leave)๋ฅผ value๊ฐ’์œผ๋กœ ์ด์šฉ
๐Ÿ’ก value๊ฐ€ enter์ธ key ๊ฐ’๋งŒ list์— ์ €์žฅํ•จ
๐Ÿ’ก list ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋‚˜ํƒ€๋ƒ„

2. ํ•ต์‹ฌ ํ’€์ด

1) name์„ key๊ฐ’์œผ๋กœ, (enter, leave)๋ฅผ value๊ฐ’์œผ๋กœ ์ด์šฉ

for (int i = 0; i < n; i++) {
	String[] s = br.readLine().split(" ");

	if (s[1].equals("enter"))
		company.put(s[0], "enter");
	else
		company.put(s[0], "leave");
}

2) value๊ฐ€ enter์ธ key ๊ฐ’๋งŒ list์— ์ €์žฅํ•จ

for (String key : company.keySet()) {
	if (company.get(key).equals("enter")) {
		list.add(key);
	}
}

3) list ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋‚˜ํƒ€๋ƒ„

Collections.sort(list);

for(int i=list.size()-1; i>=0; i--)
	System.out.println(list.get(i));

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;

public class Hash_2 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		HashMap<String, String> company = new HashMap<>();

		int n = Integer.parseInt(br.readLine());
		List<String> list = new ArrayList<String>();

		for (int i = 0; i < n; i++) {
			String[] s = br.readLine().split(" ");

			if (s[1].equals("enter"))
				company.put(s[0], "enter");
			else
				company.put(s[0], "leave");
		}

		for (String key : company.keySet()) {
			if (company.get(key).equals("enter")) {
				list.add(key);
			}
		}

		Collections.sort(list);

		for(int i=list.size()-1; i>=0; i--)
			System.out.println(list.get(i));
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ