본문 바로가기
2025/Solving

BOJ_25192 인사성 밝은 곰곰이(JAVA)

by 껐다 켜보셨어요? 2025. 4. 11.

펼쳐서 문제 보기

더보기

문제

알고리즘 입문방 오픈 채팅방에서는 새로운 분들이 입장을 할 때마다 곰곰티콘을 사용해 인사를 한다. 이를 본 문자열 킬러 임스는 채팅방의 기록을 수집해 그 중 곰곰티콘이 사용된 횟수를 구해 보기로 했다.

ENTER는 새로운 사람이 채팅방에 입장했음을 나타낸다. 그 외는 채팅을 입력한 유저의 닉네임을 나타낸다. 닉네임은 숫자 또는 영문 대소문자로 구성되어 있다.

새로운 사람이 입장한 이후 처음 채팅을 입력하는 사람은 반드시 곰곰티콘으로 인사를 한다. 그 외의 기록은 곰곰티콘을 쓰지 않은 평범한 채팅 기록이다.

채팅 기록 중 곰곰티콘이 사용된 횟수를 구해보자!

 

입력

첫 번째 줄에는 채팅방의 기록 수를 나타내는 정수 N 이 주어진다. (1≤N≤100000)

두 번째 줄부터 N 개의 줄에 걸쳐 새로운 사람의 입장을 나타내는 ENTER, 혹은 채팅을 입력한 유저의 닉네임이 문자열로 주어진다. (문자열길이1≤문자열 길이≤20)

첫 번째 주어지는 문자열은 무조건 ENTER이다.

 

출력

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

 

예제 입력 1 

9
ENTER
pjshwa
chansol
chogahui05
lms0806
pichulia
r4pidstart
swoon
tony9402

 

예제 출력 1 

8

 

예제 입력 2 

7
ENTER
pjshwa
chansol
chogahui05
ENTER
pjshwa
chansol

 

예제 출력 2 

5

첫번째 새로운 사람이 들어온 뒤  pjshwa, chansol, chogahui05은 모두 곰곰티콘으로 인사했다.

두번째 새로운 사람이 들어온 뒤  pjshwa와 chansol은 다시 곰곰티콘으로 인사했다.

 

예제 입력 3 

3
ENTER
lms0806
lms0806

 

예제 출력 3 

1

lms0806은 새로운 사람이 들어왔으므로 처음은 곰곰티콘으로 인사하고, 그 뒤로는 일반 채팅을 했다.

 

몇 년 전쯤엔가 문제가 귀여워서 풀어 보려고 했다가 시간 초과 난 이후로 방치하던 문제인데

갑자기 생각나서 풀어 보았다. 

당시 풀이도 남아 있긴 한데 .... Scanner와 ArrayList를 썼다. 

아마 그래서 시간 초과가 났겠지 하하

당시 로직은 아래와 같았는데,

1) Enter가 나오면 ArrayList를 새로 만듦 (여기까진 좋음)

2) 사용자 아이디를 일일이 ArrayList.contains()에 넣고 돌려서 있는지 체크하고 없으면 집어넣고 count++

3) 결과로 count를 출력

뭐 이런 식이었다. 

 

풀이 방법 자체에는 크게 틀린 건 없었지만,

1) Scanner를 사용한 점

2) ArrayList.contains() 연산을 반복적으로 시킨 점

때문에 아마 시간 초과가 나지 않았을까 싶다.

 

HashSet을 쓰면 굳이 contains를 체크할 필요도 없고 count변수를 따로 만들어 쓸 필요도 없어진다. 

Set이라는 애들이 원래가 중복을 허용하지 않기 때문이다.

그냥 Enter 나오기 전까지 집어넣고 Enter 나오면 result += set.size() 해 주면 된다. 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;

public class BOJ_25192 {
	static HashSet<String> hi;
	static String[] logs;
	static int result;
	
	static void setter() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		logs = new String[Integer.parseInt(br.readLine())];
		
		for(int i = 0; i<logs.length; i++) {
			logs[i] = br.readLine();
		}
	}
	
	static void greeting() {
		hi = new HashSet<>();
		for(int i = 0; i<logs.length; i++) {
			if(logs[i].equals("ENTER")) {
				result += hi.size();
				hi.clear();
				continue;
			}
			hi.add(logs[i]);
		}
		result += hi.size();
	}
	
	public static void main(String[] args) throws Exception {
		setter();
		greeting();
		System.out.println(result);
	}
}

'2025 > Solving' 카테고리의 다른 글

PGMRS_석유 시추(PCCP 기출, JAVA)  (2) 2025.04.26
PGMRS_퍼즐 게임 챌린지(PCCP 기출, JAVA)  (0) 2025.04.25
BOJ_1920 수 찾기(JAVA)  (0) 2025.04.11
BOJ_7569 토마토(JAVA)  (0) 2025.04.06
BOJ_2178 미로 탐색(JAVA)  (0) 2025.04.06

댓글