코딩가딩가

[JAVA]BOJ 7785, 회사에 있는 사람

Noooodle 2024. 7. 25. 17:56

이 문제에서 중요한 부분은 사람이름은 고유값이고 로그는 변한다는 것이다. 그럼 Map을 사용해야한다는 것을 알 수 있다! Map중에 TreeMap을 쓰면 더 쉽게 풀 수 있다.

 

사람 이름은 key가 되고 로그는 value가 된다. 그리고 value가 enter인 경우에만 출력하면 된다. 사전 역순으로 출력하라 했으므로 reverse를 이용하면 된다..

 

아 그리고 질문게시판에서 봤는데 문제에서 말하는 사전 순은 아스키코드 순이라고 한다. 사람이름을 대소문자로 구분한다 했으니.., 문제 설명이 좀 불친절하다. 예를들면 a와 A가 있다면 사전순으로 A(아스키코드 65) a(97)가 된다. 우리는 역순이니까 a(97) A(65)순으로 출력하면 된다! 어쩌피 reverseOrder를 사용하면 자동으로 해준다.. reverseOrder를 사용하지 않으면 사전순으로 정리된다.


아래는 전체코드이다. 문제가 간단해서.. 주석으로 설명을 첨부했다.

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

public class BOJ7785 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n, i;
        String str, name, log;
        StringTokenizer st;
        Map<String, String> members = new TreeMap<>(Comparator.reverseOrder()); // 역순으로 정렬

        n = Integer.parseInt(br.readLine());

        for(i=0;i<n;i++){
            str = br.readLine();
            st = new StringTokenizer(str);

            name = st.nextToken();
            log = st.nextToken();

            members.put(name, log); // log는 value이므로 근태기록이 바뀌면 갱신됨
        }

        members.forEach((key, value) -> { // forEach를 사용해 출력
            if(value.equals("enter"))
                System.out.println(key); //value가 enter인 경우에 name(key)만 출력
        });

    }
}

*TreeMap의 특징

저장 방식

 

  • TreeMap은 요소를 삽입할 때마다 Red-Black Tree 구조를 유지하면서 정렬한다.
  • 삽입, 삭제, 검색 연산은 모두 로그 시간 복잡도를 가진다.

 

출력 방식

  • TreeMap의 기본 출력은 중위 순회로 이뤄지며, 이는 키의 정렬 순서대로 요소를 방문한다.

gpt가 설명해줌

 

'코딩가딩가' 카테고리의 다른 글

[JAVA]BOJ 18870, 좌표 압축  (0) 2024.07.26
[JAVA]BOJ 1302, 베스트셀러  (0) 2024.07.25
[JAVA]BOJ 10814, 나이순 정렬  (0) 2024.07.24
[JAVA]BOJ 1181, 단어 정렬  (1) 2024.07.24
[JAVA]BOJ 2840, 행운의 바퀴  (0) 2024.07.21