말하는 컴공감자의 텃밭

백준 25192번 인사성 밝은 곰곰이 <S4> - Hash 본문

알고리즘/Backjoon - Java

백준 25192번 인사성 밝은 곰곰이 <S4> - Hash

현콩 2023. 10. 26. 15:55
728x90

 

귀여운 곰곰이가 눈에 뛰는 문제이다.

문제를 정리하면 채팅방에 사람이름이 주어진다.

ENTER 입력 이후 첫번째로 등장하는 이름의 로그는 인사를 뜻한다. 이는 결국 곰곰이로 인사한다를 뜻한다.

따라서 ENTER이후로 첫번째로 등장하는 이름의 수를 (곰곰이 등장~) 체크해서 출력하면 되는 문제이다.

 

중복을 없앤다 를 보자마자 Hash를 떠올려야 한다.

Hash 해시는 키와 데이터를 저장해주는 구조이므로 키는 1개여야 하기 때문에 중복을 허락하지 않는다.

이런 특성 때문에 암호, 메시지 인증 등에 자주 등장한다.

Hash Map은 키랑 데이터를 매핑하는 구조이므로 벨류가 필요없는 우리는 Hash Set을 활용해보자

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
 
public class Main { // 25192번 인사성 밝은 곰곰이
    public static void main(String[] args) throws Exception {
        // 닉네임을 Hash에 넣고, 중복되지 않으면 cnt ++
        // Enter가 들어오면 Hash 초기화 후 반복.
        // 복잡하다면 처음껄 함수로 빼면 될듯듯
        Scanner sc = new Scanner(System.in);
        HashSet<String> Chat = new HashSet<>();
        int K = sc.nextInt();
        int answer = 0;
        sc.nextLine(); // K 뒤 공백이 있었네..
        //input 
        for(int tc = 1; tc <= K; tc++) {
            String str = sc.nextLine();            
            if(str.equals("ENTER")) { // == 안쓰도록 주의.
                Chat.clear();
            }else if(!Chat.contains(str)){
                Chat.add(str);
                answer ++;
            }                        
        }
        
        // output
        System.out.println(answer);
    }        
}
cs

 

스캐너가 익숙해서 인풋을 스캐너로 처리하는 바라에 공백을 고려하지 않아 틀렸었다.

K을 받아준 후 뒤 공백을 sc.nextLine(); 로 consume해주자.

HashSet에 없는 이름이라면 넣어주고, answer ++해준다. 있는지 판단은 Collections의 메서드 contains로 판단했다.

 

728x90
Comments