[BaekJoon] #7785 회사에 있는 사람

현굥·2024년 9월 3일

BaekJoon

목록 보기
22/53


문제이해

이 문제는 출입기록의 수를 입력받고, 그 수 만큼 사원의 이름과 출입기록을 입력하고 최종적으로 회사에 남아있는 사원의 이름을 사전순의 역순으로 출력하는 문제입니다.

입력

입력으로 출입기록의 수를 입력받습니다. 이후, 사원의 이름과 출퇴근 log를 입력받습니다.

출력

남아있는 사원의 이름을 사전순의 역순으로 출력합니다.

문제접근

  • 이 문제는 각 사원에 대한 로그를 입력받고 이름만을 출력해냅니다. 해당 문제를 풀기 위해, key와 value를 입력받는 HashMap을 이용하였습니다.
  • 입출력을 위해 BufferedReader를 사용하였습니다.
  • 공백 기준으로 문자열을 분리하기 위해 StringTokenizer를 사용하였습니다.
  • 각 입력에 대한 조건문을 작성하여, 출근한 사람과 퇴근한 사람을 구분해주었습니다.

HashMap method

  • 연산을 위해 HashMap의 containsKey(), remove(), put(), KeySet() 메서드를 사용해주었습니다.

    • containsKey(): 특정 키가 HashMap에 존재하는지 확인하는 메서드입니다. 문제에서는 현재 들어오는 사람이 이미 있는지 확인했습니다.
    • remove(): 특정 키와 매핑된 값을 HashMap에서 제거하는 메서드입니다.
    • put() : 키와 값을 HashMap에 추가하거나, 이미 존재하는 키의 값을 업데이트하는 함수입니다. 출근한 사람을 Map에 넣기 위해 사용했습니다.
    • KeySet(): 모든 키를 포함하는 set을 반환 하는 메소드입니다.

HashMap의 메소드를 정리한 표는 아래와 같습니다.

method기능
containsKey()특정 키가 HashMap에 존재하는지 확인
remove()특정 키와 그에 매핑된 값을 HashMap에서 제거
put()키와 값을 HashMap에 추가하거나, 이미 존재하는 키의 값을 업데이트
keySet()모든 키를 포함하는 Set을 반환
values()모든 값을 포함하는 Collection을 반환
entrySet()모든 키-값 쌍을 포함하는 Set을 반환
get()특정 키에 매핑된 값을 반환
isEmpty()HashMap이 비어 있는지 확인
size()HashMap의 키-값 쌍의 개수를 반환

ArrayList

  • 마지막으로, 남아있는 사원들의 이름을 사전순의 역순으로 출력하기 위해 keySet()을 사용하여 사원들의 이름을 ArrayList에 추가했습니다.
  • 이후, 정렬을 위해 Collections.sort() 메서드를 사용하여 리스트를 정렬하였습니다.

code

import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;

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

        int N = Integer.parseInt(br.readLine());
        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            String log = st.nextToken();
            if (log.equals("enter")) {
                map.put(name, log);
            } else if (log.equals("leave") {
                map.remove(name);
            }
        }

        List<String> keys = new ArrayList<>(map.keySet());
        Collections.sort(keys, Collections.reverseOrder());
        for (int j = 0; j < keys.size(); j++) {
            System.out.println(keys.get(j));
        }

    }

}

결과창

0개의 댓글