백준 문자열 문제 중 1316번 그룹단어체크문제 해결방법이다.
문제 : https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
이 문제는 그룹단어의 개수를 출력하는 문제다.
그렇기 때문에 그룹단어인지 확인하는 checker()를 따로 만들어 사용해주었다.
1. checker함수
입력은 소문자로만 들어오기 때문에 알파벳개수인 26개의 크기로 boolean배열을 선언해주었다.
그 후 하나하나 값을 받아오며 전의 값과 비교를 했을 때
1) 만약 같지 않다면
① 그 값을 index로 하는 위치의 배열의 값
- true =>그 단어는 그룹단어가 아니므로 false 리턴 후 함수 종료.
- false => 이제 나왔으므로 false로 바꾼 후 전의 값을 현재의 값으로 바꾼 후 다음 글자 비교
2) 만약 같다면 => 계속 진행 (continue)
public static boolean checker(){
boolean[] checker = new boolean[26];
int prev = 0;
String input = sc.next();
for(int i = 0; i < input.length(); i++){
int now = input.charAt(i);
if(prev != now){
if(checker[now - 'a'] == false){
checker[now - 'a'] = true;
prev = now;
}
else if(checker[now - 'a'] == true){
return false;
}
}
}
return true;
}
2. main함수
만들어 놓은 checker함수를 사용해 count하고 출력
public static void main(String[] args){
int N = sc.nextInt();
int count = 0;
for(int i = 0; i < N; i++){
if(checker() == true){
count++;
}
}
System.out.println(count);
}
※ 이 때 Scanner는 main, checker에서 모두 쓰이므로 static으로 선언
아래는 전체코드이다.
import java.util.*;
public class BOJ_0201_1316 {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args){
int N = sc.nextInt();
int count = 0;
for(int i = 0; i < N; i++){
if(checker() == true){
count++;
}
}
System.out.println(count);
}
public static boolean checker(){
boolean[] checker = new boolean[26];
int prev = 0;
String input = sc.next();
for(int i = 0; i < input.length(); i++){
int now = input.charAt(i);
if(prev != now){
if(checker[now - 'a'] == false){
checker[now - 'a'] = true;
prev = now;
}
else if(checker[now - 'a'] == true){
return false;
}
}
}
return true;
}
}