본문 바로가기
백준 알고리즘/JAVA

백준/1316/그룹 단어 체커/JAVA

by minsol Kim 2021. 9. 23.

1316번: 그룹 단어 체커 (acmicpc.net)

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

문제

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력

첫째 줄에 그룹 단어의 개수를 출력한다.

 

import java.util.Scanner;

public class Main{
    static Scanner in = new Scanner(System.in);
    public static void main(String[] args){
        int count = 0;
        int N = in.nextInt();
        
        for(int i =0;i<N;i++){
            if(group() == true){
                count++;
            }
        }
        System.out.println(count);
    }
    public static boolean group(){
        boolean[] group = new boolean[26];
        int dif = 0; //변수선언
        String str = in.next(); //문자열입력
        
        for(int i=0;i<str.length();i++){ //문자열길이만큼 반복
            int cur = str.charAt(i); //현재 문자열에서 각문자추출
            
            if(dif != cur){ //앞문자와 i번째 문자가 다를경우
                
                if(group[cur -'a']== false){ //현재문자가 false인경우
                    group[cur -'a']=true; //true로 바꿔준다.
                    dif = cur; 
                }
                else{ //그룹단어가 아닌경우 
                    return false; //함수를 종료시킨다. 
                }
            }
            else{ //연속된 문자인경우  
                continue;
            }
        }
        return true;
    }
}

단어의 길이만큼 반복한다.

연속된문자인지 비연속된문자인지 2가지의 경우로 나눌 수 있다. 

비연속된 문자인경우 중복인 문자인경우와 중복이 아닌문자인 경우 2가지로 나눌 수 있다.

 

이전문자값과 현재문자값이 다른경우는 현재문자를 true로 바꿔주고 다음문자값 비교를 위해 이전문자값변수 dif를 true로 똑같이 바꿔준다. 

중복된 문자인경우에는 true값이므로 그룹단어가 아니므로 함수를 종료시키면 된다. 

연속된 문자일 경우는 함수를 계속 진행시키면 된다.

'백준 알고리즘 > JAVA' 카테고리의 다른 글

백준/2292/벌집/JAVA  (0) 2021.09.27
백준/1712/손익분기점/JAVA  (0) 2021.09.24
백준/5622/다이얼/JAVA  (0) 2021.09.19
백준/2908/상수/JAVA  (0) 2021.09.17
백준/1152/단어의 개수/JAVA  (0) 2021.09.16

댓글