문제 출처 https://www.acmicpc.net/problem/1316
내가 작성한 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 y=0; y<n; y++) {
String s = br.readLine();
boolean alp[] = new boolean[26]; //새로운 단어가 들어올때마다 false로 초기화
int word = 0; //새로운 단어가 들어올때마다 word는 0으로 초기화
for(int i=0; i<s.length(); i++) {
if(alp[s.charAt(i)-97]) { //이미 언급한 알파벳이면
if(s.charAt(i)!=s.charAt(i-1)) { //바로 전의 알파벳과 연속이 안된다면
word++; // 단어 카운트를 올린다.(그룹단어가 아니라는 뜻)
break;
}
}
else { //한번도 나오지 않았던 알파벳이라면
alp[s.charAt(i)-97]=true; //해당 알파벳이 true를 준다.
}
}
if(word==0) { //i의 반복문이 다 돌고도 word가 0으로 유지되어있다면
count++;
}
}
System.out.print(count); //그룹단어 개수
}
}
접근 방법
- 새로운 문자열을 읽을 때마다 apl[ ]를 false로 초기화 하며, word를 0으로 초기화한다.
- charAt를 이용하여 -97을 하며 아스키 코드를 이용하여 097은 'a'를 뜻하므로 'a'가 들어오면 apl[0] = true를 해준다.
ex) c -> apl[099('c')-97] = apl[2] = true- 만약 이미 true로 바뀐 알파벳의 문자인 경우는 바로 전 문자와 같은 문자면 상관 없지만 다르면 바로 그룹단어가 아니므로 word 카운트를 올리고 for문을 나간다.
ex) aba -> apl[0] = true인 상태에서 3번째로 a 가 또 들어왔을 때 바로 전 문자가 b이므로 그룹문자가 아니다.- 문자 길이만큼 반복문을 다 돈 후, word가 처음 0이 그대로 이면 그 문자는 그룹단어이다. count에 +1을 하여 그룹단어의 개수를 세준다.