Algorithm
[백준] 1346번 - 그룹 단어 체커 (Java)
haehyun
2022. 2. 7. 18:24
728x90
문제
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
코드
import java.util.Arrays;
import java.util.Scanner;
// 그룹 단어 체커
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = Integer.parseInt(sc.nextLine());
boolean[] alphabet = new boolean[26];
int count = 0;
for (int i = 0; i < N; i++) {
Arrays.fill(alphabet, false); // 알파벳 등장 여부 초기화
String str = sc.nextLine();
char before = str.charAt(0); // 이전 문자
int j = 0;
for (j = 0; j < str.length(); j++) {
char curr = str.charAt(j);
// 이전에 나온적 있는데, 앞 문자와 다를 경우 (연속으로 사용된 게 아닐 경우)
if (before != curr && alphabet[curr - 'a'] == true) {
break;
}
alphabet[curr - 'a'] = true;
before = curr;
}
// for문 중간에 break 걸리지 않고 끝까지 진행됐을 경우 그룹단어 OK
if (j == str.length()) {
count++;
}
}
System.out.println(count);
}
}
- 문자열 내에서 a~z 소문자 알파벳의 등장 여부를 boolean[] 배열에 저장한다. 새로운 문자열 체크 전에 모든 알파벳이 아직 등장하지 않았다는 의미로 배열을 false로 초기화해줘야 한다.
- true : 이전에 등장한 적 있는 알파벳
- false : 이전에 등장한 적 없는 알파벳
- 그룹 단어가 아닌 경우는 문자가 연속으로 사용되지 않고, 다른 문자 뒤에 한번 더 등장했을 때 뿐이다.
- 즉, 이전에 나온적 있는 알파벳이고(boolean[] 배열 값이 true), 앞 문자와 다를 경우 그룹 단어가 아니다.
- boolean[] alphabet : 이전에 나온적 있는 문자인지 체크용
- char before : 해당 문자의 바로 이전 문자 확인용
- for문 중간에 break 조건에 걸리지 않고 끝가지 진행되었을 경우, 마지막 반복을 수행한 후 j++ 된 값으로 for문 반복 여부를 체크하기 때문에 j값은 str.length()이 된다. 이를 위해 for문 밖에 변수 j를 선언해둬서 for문 밖에서 j값을 참조할 수 있도록 한다.
int j = 0;
for (j = 0; j < str.length(); j++) {
// 반복코드
}
if (j == str.length()) {
count++;
}
728x90