개발지식 먹는 하마 님의 블로그
1316번 - 그룹 단어 체커 본문
✏️ 문제 풀이
- 새로운 문자일 경우 이를 저장한다.
중복을 허용하지 않는 HasgSet을 사용하였다.
HashSet<Character> seen = new HashSet<>();
- 현재 문자가 이전 문자와 다를 경우, 이 문자가 나온 적이 있는지 확인한다.
contains는 해시 테이블 기반 검색을 하기 때문에 for문 사용해 직접 검사하는 것보다 빠르다.
나온적이 있다면 그룹 단어가 아니다. 아니라면 해당 문자를 저장한다.
for (char ch : word.toCharArray()) {
if (ch != prev) { // 새로운 문자일 경우만 검사
if (seen.contains(ch)) { // 이미 나온 문자라면 그룹 단어가 아님
return false;
}
seen.add(ch); // 새 문자를 집합에 추가
}
prev = ch; // 이전 문자 갱신
}
🖥️ 코드
public static boolean isGroupWord(String word) {
HashSet<Character> seen = new HashSet<>(); // 등장한 문자 저장
char prev = '\0'; // 이전 문자 초기화
for (char ch : word.toCharArray()) {
if (ch != prev) { // 새로운 문자일 경우만 검사
if (seen.contains(ch)) { // 이미 나온 문자라면 그룹 단어가 아님
return false;
}
seen.add(ch); // 새 문자를 집합에 추가
}
prev = ch; // 이전 문자 갱신
}
seen.clear();
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 단어 개수
int count = 0; // 그룹 단어 개수
sc.nextLine(); // 개행 문자 처리
for (int i = 0; i < n; i++) {
String word = sc.nextLine();
if (isGroupWord(word)) {
count++;
}
}
System.out.println(count);
sc.close();
}
'coding' 카테고리의 다른 글
프로그래머스 lv2 - 멀쩡한 사각형 (0) | 2025.03.07 |
---|---|
프로그래머스 lv2 - 시소 짝꿍 (0) | 2025.03.05 |
1541번 - 잃어버린 괄호 (0) | 2025.02.27 |
13305번 - 주유소 (0) | 2025.02.26 |
1931번 - 회의실 배정 (0) | 2025.02.25 |