문제
https://www.acmicpc.net/problem/1316
단어가 주어졌을 때 그 단어가 그룹 단어인지 판단하는 문제였다. 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.
문제 풀이
현재 알파벳이랑 다음 알파벳이 같은지 확인하고, 만약 다르다면 단어에 그 알파벳이 또 있는지 확인하는 방식으로 풀었다.
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());
//그룹 단어의 개수를 세기 위한 변수
int count = 0;
for (int i = 0; i < N; i++) {
String s = br.readLine();
//알파벳 소문자가 등장한 적 있는지 기록하는 배열
boolean[] array = new boolean[26];
//그룹 단어인지 여부를 나타내는 변수
boolean isGroupWord = true;
//각 단어의 문자들을 하나씩 검사
for (int j = 0; j < s.length(); j++) {
//현재 문자가 이전 문자와 다르다면
if (j > 0 && s.charAt(j) != s.charAt(j - 1)) {
//현재 문자가 등장한 적 있다면 그룹 단어가 아님
if (array[s.charAt(j) - 'a']) {
isGroupWord = false;
break;
}
}
// 현재 문자가 등장했음을 기록
array[s.charAt(j) - 'a'] = true;
}
//그룹 단어라면 count 증가
if (isGroupWord) {
count++;
}
}
//최종 그룹 단어의 개수 출력
System.out.println(count);
}
}
이 코드는 boolean 배열을 사용하여 각 알파벳의 출현 여부를 기록한다. 하지만 매번 알파벳이 바뀔 때마다 배열을 확인해야 하므로, 성능이 떨어질 수 있다.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/JAVA]2738번 행렬 덧셈 (0) | 2025.01.23 |
---|---|
[백준/JAVA]25206번 너의 평점은 (1) | 2025.01.23 |
[백준/JAVA]2941번 크로아티아 알파벳 (0) | 2025.01.22 |
[백준/JAVA]1157번 단어 공부 (0) | 2025.01.21 |
[백준/JAVA]10988번 팰린드롬인지 확인하기 (0) | 2025.01.21 |