1. 문제 링크
https://www.acmicpc.net/problem/1316
2. 문제
요약
- 그룹 단어란 각 문자들이 연속해서 나타나는 단어입니다. 만약 한 문자가 연속되지 않은 곳에서 다시 나타난다면 이는 그룹 단어가 아닙니다.
- 입력: 첫 줄에는 단어의 개수, 두 번째 줄부터 입력된 단어의 개수만큼 중복되지 않고 소문자로 되어 있는 단어들을 입력 받습니다.
- 출력: 그룹 단어의 개수를 출력합니다.
3. 소스코드
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public int getGroupWordNum(String[] words) {
int groupWordNum = 0;
for(int i = 0; i < words.length; i++) {
ArrayList<String> exist_alp = new ArrayList<String>();
String prev_alp;
boolean check_groupNum = true;
prev_alp = words[i].substring(0, 1);
exist_alp.add(prev_alp);
for(int j = 1; j < words[i].length(); j++) {
if(prev_alp.equals(words[i].substring(j, j + 1))) {
continue;
} else {
for(int k = 0; k < exist_alp.size(); k++) {
if(words[i].substring(j, j + 1).equals(exist_alp.get(k))) {
check_groupNum = false;
break;
}
}
exist_alp.add(prev_alp);
prev_alp = words[i].substring(j, j + 1);
}
}
if(check_groupNum) {
groupWordNum++;
}
}
return groupWordNum;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String num_string = br.readLine();
int num = Integer.parseInt(num_string);
String[] words = new String[num];
for(int i = 0; i < num; i++) {
words[i] = br.readLine();
}
Main m = new Main();
System.out.println(m.getGroupWordNum(words));
}
}
4. 접근
- 각 단어에서 이미 나온 문자들은 ArrayList에 기록해놓습니다. 이를 통해 이미 나온 문자인지를 확인합니다.
- 각 단어에서 이전 문자와 현재 문자가 다른 경우, 이미 나온 문자인지를 확인하고 그렇지 않다면 이 문자 역시도 이미 나온 문자이므로 ArrayList에 기록해놓습니다.
- 만약 이전에 나온 문자라면, 이는 그룹 단어가 될 수 없으므로 해당 단어는 더 이상 확인하지 않고 다음 단어를 확인합니다.
- 위의 과정에서 모든 문자가 해당하지 않는 단어는 그룹 단어가 되므로 해당 단어는 그룹 단어 개수에 추가합니다.