코테/백준

[백준/JAVA] 7785번: 회사에 있는 사람

imname1am 2023. 4. 6. 22:22
반응형

🔺 문제

 

7785번: 회사에 있는 사람

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

www.acmicpc.net

 

🔺 코드

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));

        int n = Integer.parseInt(br.readLine());
        Set<String> set = new HashSet<>();

        for(int i=0 ; i < n ; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine()," ");		    
            String name = st.nextToken();
            String isIn = st.nextToken();

            if(isIn.equals("enter")) {
            	set.add(name);
            } else {
            	set.remove(name);
            }
        }

        // 스트림 이용해 내림차순 출력
        set.stream()	// 객체를 스트림으로 변환
           .sorted(Collections.reverseOrder())	// 스트림 요소를 역순으로 정렬
           .forEach(System.out::println);	// 정렬된 스트림 요소를 반복하며 각 요소 출력
    }
}
✅ 해결 아이디어
- Set 활용.
- 둘째 줄부터 두 번째로 받은 입력값이 "enter"이면 Set에 값 추가 (add) / 아니면 값 제거 (remove)
- Set 내용 내림차순 출력 → 스트림 활용.

.sorted(Collections.reverseOrder()) : 스트림 요소를 역순으로 정렬

.forEach(System.out::println); : 정렬된 스트림 요소를 반복하며 각 요소 출력

 


🔺 다른 풀이들

 

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

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

lotuslee.tistory.com

 

[BOJ] 백준 7785 회사에 있는 사람 (Java)

https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이

bakssso.tistory.com


💬 느낀 점

문제는 안 어려운데

이렇게 HashSet을 스트림으로... 그것도 내림차순으로 구글링 없이 출력하라고 하면 못 할 것 같다....

복습...하면서 스트림도 외워야겠다.

 


(참고)

✔ 스트림 sorted 내림차순 정렬

 

[Stream API] 중간 연산 - sorted 메서드

개념 스트림에서는 스트림 요소들을 정렬할 수 있는 sorted라는 메서드를 제공한다. sorted 메서드는 파라미터에 따라 2가지 버전이 존재한다. sorted() 메서드 스트림 요소의 타입에 따라 기본적으로

dev-kani.tistory.com

 

 

[Java/자바] 스트림(Stream) 사용법

스트림(Stream) 스트림은 java8부터 추가된 배열이나 컬렉션의 요소(List, Map, Set)들을 더 편리하게 가공하고 처리하도록 해주는 반복자입니다. 람다식 사용과 연산 과정에서 불필요한 변수를 남기지

lasbe.tistory.com

 

✔ Stream을 이용한 HashSet 정렬

 

Java - HashSet 정렬, 3가지 방법

Java에서 HashSet 등, Set를 정렬하는 방법을 소개합니다. HashSet은 순서를 보장하지 않는 자료구조입니다. 이럴 때, HashSet를 List로 변환하고 정렬할 수 있습니다. TreeSet는 Tree 자료구조를 이용하여 구

codechacha.com

 

반응형