백준공부/java

[백준] 1316번 그룹 단어 체커 문제! (silver 5

gomduri43 2022. 8. 7. 19:23

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws IOException  {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
		int n=Integer.parseInt(br.readLine());
		int alphabet;
		int count=n;
		boolean[] howMany=new boolean[n];
		for(int i=0;i<n; i++) {
			int[] wordRoom=new int[26];
			String a=br.readLine();
		
			for(int j=0; j<a.length(); j++) {
				alphabet=a.charAt(j)-'a';
				//여기서 wordRoom[alphabet]값이 0일때는 아직 등장 전으로 잡아준 것이므로,
                //만약 등장했는데, 인덱스 0에서 등장하여 그대로 0이 저장된다면,
                //후에 그 알파벳이 다시 등장해도, 인덱스 0이라 0인지, 등장 전이라 0인지 구분이 불가
                //따라서, 등장 전을 0으로 잡고 등장한 수는 구분하기 위해서,
                //j+1을 저장해준다. 그러면 인덱스 0에서 등장한 알파벳도 1이 들어가, 등장 전 0이랑 구분,
                //이렇게 될경우, j+1값을 대입함으로써, 다음 인덱스 값을 지니게 되는 것이므로,
                //다음 반복문에서, wordRoom[alphabet]안에 j(j+1을 했던 값)가 있으면, 
                //이는 지금 바로전에 단어에서 그 알파벳이 등장했다는 소리이다. 
                if(wordRoom[alphabet]==0 || wordRoom[alphabet]==j  ) {
					wordRoom[alphabet]=j+1;
				}
				else {
					count--; //이는 그룹단어체커가 아니므로 count에서 제외하기. 
					break;
				}
			}	
		}
		bw.write(count+"");
		bw.flush();
	}
}