[백준] 7785번-회사에 있는 사람-Java

screenshot

[백준] 7785번-회사에 있는 사람-Java


❓문제

N명의 직원의 출입기록을 이름+ (enterorleave) 형태로 받아 leave기록이 없는 직원을 사전 역순으로 출력해주면 된다.

🖊️풀이법

문제만 봐도 keyvalue매칭을 이용한 Map을 사용해야 하는 느낌이 온다..!

  1. 반복문을 통해 주어진 요소들을 Mapkeyvalue로 요소들을 담는다.
  2. 담긴 요소에서 value값을 조회하여, 만약 value값이 leave인 경우 map에서 제거해준다.
  3. 맵 객체에서 정렬을 할 수 있도록 list객체로 변환해준다.
  4. list객체를 사전 역순으로 정렬한다.
  5. 정렬된 list를 하나의 요소씩 출력한다.

정답 코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine()); //총 출입기록을 N에 할당
        Map<String,String> map = new HashMap<>();
        for(int i = 0; i < N; i++){ 
            StringTokenizer st = new StringTokenizer(br.readLine());
            String key = st.nextToken();
            String value = st.nextToken();
            map.put(key, value); //반복문을 통해 map에 출입기록 입력
            if(map.get(key).equals("leave")){ //만약 출입기록이 leave인 경우 map에서 삭제
                map.remove(key);
            }
        }
        ArrayList<String> list = new ArrayList<String>(map.keySet()); //map의 키값들을 list객체에 할당
        Collections.sort(list,Collections.reverseOrder()); //사전 역순으로 정렬
        for(int i = 0; i < list.size(); i++){
            sb.append(list.get(i)).append('\n');
        }
        System.out.println(sb);
    }
}

끝으로

Map에서 제공하는 keySet(),entrySet()등 맵의 요소들을 변환시키기 유용한 메서드들을 잘 활용하자 :)