home > algorithm > baekjoon > [baekjoon] 인사성 밝은 곰곰이 (백준 25192 java 풀이)

[baekjoon] 인사성 밝은 곰곰이 (백준 25192 java 풀이)
algorithm baekjoon step20

intro : 중복제거는 Set이 최고지.

백준 문제링크

문제

인사하는 곰곰이 알고리즘 입문방 오픈 채팅방에서는 새로운 분들이 입장을 할 때마다 곰곰티콘을 사용해 인사를 한다. 이를 본 문자열 킬러 임스는 채팅방의 기록을 수집해 그 중 곰곰티콘이 사용된 횟수를 구해 보기로 했다. ENTER는 새로운 사람이 채팅방에 입장했음을 나타낸다. 그 외는 채팅을 입력한 유저의 닉네임을 나타낸다. 닉네임은 숫자 또는 영문 대소문자로 구성되어 있다. 새로운 사람이 입장한 이후 처음 채팅을 입력하는 사람은 반드시 곰곰티콘으로 인사를 한다. 그 외의 기록은 곰곰티콘을 쓰지 않은 평범한 채팅 기록이다. 채팅 기록 중 곰곰티콘이 사용된 횟수를 구해보자!

입력

첫 번째 줄에는 채팅방의 기록 수를 나타내는 정수 N 이 주어진다. (1 <= N <= 100,000) 두 번째 줄부터 N 개의 줄에 걸쳐 새로운 사람의 입장을 나타내는 ENTER, 혹은 채팅을 입력한 유저의 닉네임이 문자열로 주어진다. (1 <= 문자열 길이 <= 20) 첫 번째 주어지는 문자열은 무조건 ENTER이다.

출력

채팅 기록 중 곰곰티콘이 사용된 횟수를 출력하시오.

문제 풀이 (244ms)

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

public class Main {
    public static void main(String[] args) throws IOException {
        // 입출력을 위한 BufferedReader, BufferedWriter 객체 생성
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String enter = "ENTER";

        // 입력받을 값 개수 
        int count = Integer.parseInt(br.readLine());
        int result = 0;
        // 중복 제거를 위한 Set 변수 선언 
        HashSet<String> set = new HashSet<>();
        for (int i = 0; i < count; i++) {
            String input = br.readLine();
            // ENTER가 나오면 set 변수 초기화 및 result 값 적립
            if (input.equals(enter)) {
                result += set.size();
                set.clear();
            } else {
                // ENTER 가 나오지 않으면 set에 input 적립
                set.add(input);
            }
        }
        // 반복문이 마무리되고, set변수의 개수 만큼 적립
        result += set.size();

        // bw로 출력하기 위해 문자열로 변환 후 write
        bw.write(String.valueOf(result));
        bw.flush();

        // 자원 반납
        bw.close();
        br.close();
    }
}

문제 해석

위 문제는 실버4 난이도에 맞지않게 굉장히 쉽게 풀었다. 아니 가끔 백준 문제 난이도 보면 이해가 안가는게 있는데 이정도가 실버4라고? 싶다.(정수론 문제에 약해서 그런가?)

해당 문제는 원하는 바가 명확하다. 곰곰이모티콘을 사용한 횟수를 구하는건데, 곰곰 이모티콘은 누군가 입장하였을때 ENTER 라는 문자가 출력되고 그 이후 사용자가 첫번째로 채팅을 사용할 때 곰곰 이모티콘을 사용한다 그렇다면 ENTER 이후에 채팅을 사용한 사용자를 중복을 제거하여 관리하면 곰곰이모티콘을 사용한 횟수를 계산할 수 있고, 첫번째 ENTER 이후에 다음 ENTER는 새로운 사용자가 입장하였다는 뜻이니, 다시금 채팅 사용자의 중복을 제거한 값을 계산하면 자연스럽게 곰곰이모티콘을 사용한 횟수를 구할 수 있다.