알고리즘/백준 풀이(문자열)

백준 1316번 - 그룹 단어 체커

공부 기록장 2024. 1. 7. 21:44

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

▶그룹단어란 happy 처럼 알파벳이 서로 떨어져 있지 않은 경우를 말하고 aba 처럼 알파벳 a가 서로 떨어져 있을 경우 그룹단어가 아니다.

 

ex)  alpha[26] 배열을 생성하고 aba 라는 문자열이 있을 때

               

먼저      a가 속하는 alpha[0] 에 true 값을 반환해주고

그 다음 b가 속하는 alpha[1] 에 true 값을 반환하고

그 다음 a가 속하는 alpha[0] 에 true 값을 반환하려고 했는데 이미 alpha[0]이 true 값이기 때문에 이 경우는 그룹단어가 아닌 걸로 판단하는 식으로 코드를 작성할 수 있다.

 

아래 코드에서는 a 나 ab 처럼 문자열 길이가 1이나 2인 경우 그룹단어이기 때문에 따로 빼줬고

이 외에는 이전 알파벳이 나온 경우 count 값을 증가하고 만약 count 값이 양수이면 그룹단어가 아닌 걸로 판단하여 word 변수에 1씩 더해준 다음 입력받은 N 에 word 를 빼서 그룹단어의 갯수를 출력하였다.

 

 

 

코드

import java.io.*;
import java.util.*;

public class Main{
	public static void main(String[] args) throws IOException
	{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	
    	int N = Integer.parseInt(st.nextToken());
    	
    	String arr[] = new String[N];
    	boolean alpha[][] = new boolean[N][26];
    	
    	int count=0;
    	int word=0;
    	for(int i=0;i<N;i++)
    	{
    		arr[i] = br.readLine();
    	}
    	
    
    	for(int i=0;i<N;i++)
    	{
    		if(arr[i].length()==1||arr[i].length()==2)
    		{
    			continue;
    		}
    		else 
    		{
    			count=0;
    			for(int j=0;j<arr[i].length();j++)
    			{
    				char s = arr[i].charAt(j);
    				byte num = (byte)s;
    				if(j==0)
    					alpha[i][num-97]=true;
    				else if(j>0) 
    				{
    					if(s==arr[i].charAt(j-1)) //이전 알파벳과 같은 경우
    					{
    						alpha[i][num-97]=true;
    					}
    					else                      //이전 알파벳과 다른 경우
    					{
    						if(alpha[i][num-97]==true)
    						{
    							count++;
    						}
    						else
    						{
    							alpha[i][num-97]=true;
    						}
    							
    					}
    				}
    			}
    			if(count>0)
    		    	word+=1;
    		}
    	}
        System.out.println(N-word);
    }
}