본문 바로가기
Computer/Algorithm_Java

[BaekJoon] 7785번 회사에 있는 사람 문제풀이 (Success)

by HJ0216 2023. 8. 12.
 

7785번: 회사에 있는 사람

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

www.acmicpc.net

 

Language: Java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int num = Integer.parseInt(br.readLine());
 
        Map<StringString> map = new HashMap<>();
        for (int i = 0; i < num; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            String status = st.nextToken();
 
            if (!map.containsKey(name)) {
                map.put(name, status);
            } else {
                map.remove(name);
            }
        }
 
        List<String> keyList = new ArrayList<>(map.keySet());
        keyList.sort((s1, s2) -> s2.compareTo(s1));
 
        for (String s : keyList) {
            bw.write(s + "\n");
        }
 
        bw.flush();
        bw.close();
    }
 
}
 
 
 

🤔 해설

1. map

    - key: name, value: status(enter or leave)

    - if 조건문

        - 회사에 동명이인은 없는 것으로 전제, 만일 동일한 이름이 입력되면 map에서 제거

 

2. keyList

    - 퇴근하지 않은 사람의 이름을 출력하기 위해 keySet으로만 구성된 List 선언

    - sort((s1, s2) -> s2.compareTo(s1)): 내림차순 정렬

 

😮 이 외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int num = Integer.parseInt(br.readLine());
        Map<StringString> map = new HashMap<>();
        for (int i = 0; i < num; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            String status = st.nextToken();
            if (!map.containsKey(name)) {
                map.put(name, status);
            } else {
                map.remove(name);
            }
        }
        List<String> keyList = new ArrayList<>(map.keySet());
 
        Collections.sort(keyList, Collections.reverseOrder());
 
        for (String s : keyList) {
            bw.write(s + "\n");
        }
 
        bw.flush();
        bw.close();
    }
 
}
 
 
 

- 정렬: Collections.sort() + Collections.reverseOrder() 사용

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
 
        Set<String> set = new HashSet<>();
 
        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");
            String name = input[0];
            String status = input[1];
 
            if (set.contains(name)) {
                set.remove(name);
            } else {
                set.add(name);
            }
 
        }
 
        List<String> list = new ArrayList<>();
        Iterator<String> it = set.iterator();
 
        while (it.hasNext()) {
            list.add(it.next());
        }
 
        Collections.sort(list, Collections.reverseOrder());
 
        for (String name : list) {
            bw.write(name + "\n");
        }
 
        bw.flush();
        bw.close();
    }
 
}
 
 
 

- HashSet

   - 같은 이름이 없을 경우에는 set에 추가하고, 있을 경우에는 set에서 제거

- List

    - Collections.sort 대상은 list만 가능하므로 Iterator를 통해서 set 요소를 list에 저장

- Iterator

    - it.hasNext(): 현재 반복자가 다음 요소가 있는지 여부를 확인

    - it.next(): 현재 반복자가 가리키고 있는 요소를 반환하고, 반복자를 다음 요소로 이동

 

 

 

🔗 소스 코드
HJ0216/TIL/BOJ

 

📚 참고 자료

 

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

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

lotuslee.tistory.com