[백준] 7785번 : 회사에 있는 사람 (실버 Ⅴ) - Java/자바

2025. 6. 14.·Problem Solving (Java)/백준
반응형


✅ 문제

문제링크

🔗 https://www.acmicpc.net/problem/7785

 


✅ 풀이

🔹 코드 1

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Map<String, String> workingList = new HashMap<>();
        StringTokenizer st;

        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            workingList.put(st.nextToken(), st.nextToken());
            // put()메서드는 같은 키가 이미 존재하는 경우 매핑되는 값이 변경된다.
        }

        List<String> keyList = new ArrayList<>(workingList.keySet());
        Collections.sort(keyList, Collections.reverseOrder());

        StringBuilder sb = new StringBuilder();
        for (String s : keyList) {
            if (workingList.get(s).equals("enter")) {
                sb.append(s).append("\n");
            }
        }
        sb.setLength(sb.length() - 1);
        System.out.println(sb);
    }
}

 

문제에서 제시하는 조건을 상세하게 읽고 꼭 조건에 맞게 코드를 설계하도록 하자❗

 

이름을 key값으로 저장하고 value값으로 enter, leave 정보를 저장하도록 하자.

HashMap을 사용하면 된다.

HashMap 객체를 생성하도록 하고 workingList 변수에 참조값을 저장하도록 하자.

for문 반복을 통해 put()메서드를 사용해 key와 value값을 넣어주도록 한다.

 

HashMap은 순서가 보장되지 않으므로 문제에서 출력에 현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다는 조건을 지키기 위해 ArrayList를 사용하도록 하자.

List<String> keyList = new ArrayList<>(workingList.keySet());하여 ArrayList 객체를 생성하고 keySet()메서드를 사용해 key값들을 넣어주도록 한다.

Collections 클래스에 sort()메서드를 사용해 정렬하도록 하는데 두번째 인자로 Collections.reverseOrder()을 주어 사전 순의 역순으로 정렬하도록 한다.

 

foreach문을 통해 String s에 keyList의 값을 하나씩 받고 if문에 HashMap 클래스의 get()메서드를 통해 해당 키값의 value값을 가져오고 equals()메서드를 통해 value값이 "enter"인지 확인한다.

true이면 StringBuilder sb에 append()메서드를 사용해 넣어주도록 한다.

sb를 출력한다.

 

🔹 결과 1

 

🔹 코드 2

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Map<String, String> workingList = new HashMap<>();
        StringTokenizer st;

        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            // 이미 key가 있다면 leave 하는 것이므로 제거해준다.
            if (workingList.containsKey(name)) {
                workingList.remove(name);
            } else {
                workingList.put(name, st.nextToken());
            }
        }

        List<String> keyList = new ArrayList<>(workingList.keySet());
        Collections.sort(keyList, Collections.reverseOrder());

        StringBuilder sb = new StringBuilder();
        for (String s : keyList) {
            sb.append(s).append("\n");
        }
        sb.setLength(sb.length() - 1);
        System.out.println(sb);
    }
}

 

두번째 방법은 앞선 코드를 조금 변경해보았다.

만약 입력 받을 때 같은 key값이 들어온다면 이는 leave 하는 것일 것이다.

따라서 같은 key값이 들어온다면 HashMap에서 제거하도록 한다면 일하는 중인 사람만 남게 될 것이다.

 

for문에 String name에 이름을 입력받고 if문을 통해 containsKey()메서드를 사용해 이미 키가 있으면 remove()메서드를 사용해 제거해주도록 한다.

키가 없다면 put()메서드를 사용해 넣어주도록 한다.

 

그 이후에는 앞에 방법과 같이 ArrayList에 key값들을 넣어주고 이를 역순으로 정렬하도록 하자.

그렇다면 이후 foreach문에서 ArrayList에 있는 모든 값들은 일하는 중인 사람들만 남으므로 따로 if문을 사용할 필요가 없다.

StringBuilder sb에 넣어주도록 하고 이를 출력한다.

 

🔹 결과 2

 

🔹 알게된 정보

    • ⚠️ 문제의 조건을 상세히 읽어보도록 하자❗
    • HashMap은 입력 순서를 보장하지 않는다.

 


반응형
저작자표시 비영리 동일조건 (새창열림)

'Problem Solving (Java) > 백준' 카테고리의 다른 글

[백준] 10816번 : 숫자 카드 2 (실버 Ⅳ) - Java/자바  (4) 2025.06.15
[백준] 1620번 : 나는야 포켓몬 마스터 이다솜 (실버 Ⅳ) - Java/자바  (2) 2025.06.14
[백준] 14425번 : 문자열 집합 (실버 Ⅳ) - Java/자바  (2) 2025.06.14
[백준] 10815번 : 숫자 카드 (실버 Ⅴ) - Java/자바  (0) 2025.06.13
[백준] 10814번 : 나이순 정렬 (실버 Ⅴ) - Java/자바  (2) 2025.06.11
'Problem Solving (Java)/백준' 카테고리의 다른 글
  • [백준] 10816번 : 숫자 카드 2 (실버 Ⅳ) - Java/자바
  • [백준] 1620번 : 나는야 포켓몬 마스터 이다솜 (실버 Ⅳ) - Java/자바
  • [백준] 14425번 : 문자열 집합 (실버 Ⅳ) - Java/자바
  • [백준] 10815번 : 숫자 카드 (실버 Ⅴ) - Java/자바
sunghyun.dev
sunghyun.dev
개발 공부를 기록하는 블로그입니다.
  • sunghyun.dev
    개발 공부 기록 블로그
    sunghyun.dev
  • 전체
    오늘
    어제
    • 전체 글 (61)
      • Problem Solving (Java) (51)
        • 백준 (51)
        • 프로그래머스 (0)
      • Computer Science (2)
        • 자료구조 (0)
        • 알고리즘 (2)
        • 컴퓨터 구조 (0)
        • 운영체제 (0)
        • 컴퓨터 네트워크 (0)
      • Language (7)
        • Java (7)
        • Kotlin (0)
        • Python (0)
      • Framework (0)
        • Spring (0)
        • Node.js (0)
        • Vue.js (0)
        • React (0)
      • DBMS (0)
        • 데이터베이스 (0)
        • MySQL (0)
        • Oracle (0)
        • MariaDB (0)
      • Git (0)
      • Web (0)
      • Cloud (0)
      • 자격증 (0)
        • SQLD (0)
        • 정보처리기사 (0)
        • 오픽 (0)
        • AICE (0)
      • Toy Project (0)
      • IDE (0)
        • IntelliJ IDEA (0)
      • 기타 (0)
      • Tistory (1)
  • 링크

    • Github
    • Notion
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 인기 글

  • 태그

    재귀함수
    최대공약수
    백준
    유클리드호제법
    덱
    Java
    코딩테스트
    Deque
    이진탐색
    스택
    Comparator
    HashMap
    알고리즘
    카운팅정렬
    문자열
    조합
    gcd
    배열
    브루트포스
    LCM
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
sunghyun.dev
[백준] 7785번 : 회사에 있는 사람 (실버 Ⅴ) - Java/자바
상단으로

티스토리툴바