[BaekJoon] 1316 그룹 단어 체커

오태호·2021년 12월 13일
0

1.  문제 링크

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

2.  문제

요약

  • 그룹 단어란 각 문자들이 연속해서 나타나는 단어입니다. 만약 한 문자가 연속되지 않은 곳에서 다시 나타난다면 이는 그룹 단어가 아닙니다.
  • 입력: 첫 줄에는 단어의 개수, 두 번째 줄부터 입력된 단어의 개수만큼 중복되지 않고 소문자로 되어 있는 단어들을 입력 받습니다.
  • 출력: 그룹 단어의 개수를 출력합니다.

3.  소스코드

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public int getGroupWordNum(String[] words) {
		int groupWordNum = 0;
		for(int i = 0; i < words.length; i++) {
			ArrayList<String> exist_alp = new ArrayList<String>();
			String prev_alp;
			boolean check_groupNum = true;
			prev_alp = words[i].substring(0, 1);
			exist_alp.add(prev_alp);
			for(int j = 1; j < words[i].length(); j++) {
				if(prev_alp.equals(words[i].substring(j, j + 1))) {
					continue;
				} else {
					for(int k = 0; k < exist_alp.size(); k++) {
						if(words[i].substring(j, j + 1).equals(exist_alp.get(k))) {
							check_groupNum = false;
							break;
						}
					}
					exist_alp.add(prev_alp);
					prev_alp = words[i].substring(j, j + 1);
				}
			}
			if(check_groupNum) {
				groupWordNum++;
			}
		}
		
		return groupWordNum;
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String num_string = br.readLine();
		int num = Integer.parseInt(num_string);
		String[] words = new String[num];
		for(int i = 0; i < num; i++) {
			words[i] = br.readLine();
		}
		
		Main m = new Main();
		System.out.println(m.getGroupWordNum(words));
	}
}

4.  접근

  • 각 단어에서 이미 나온 문자들은 ArrayList에 기록해놓습니다. 이를 통해 이미 나온 문자인지를 확인합니다.
  • 각 단어에서 이전 문자와 현재 문자가 다른 경우, 이미 나온 문자인지를 확인하고 그렇지 않다면 이 문자 역시도 이미 나온 문자이므로 ArrayList에 기록해놓습니다.
  • 만약 이전에 나온 문자라면, 이는 그룹 단어가 될 수 없으므로 해당 단어는 더 이상 확인하지 않고 다음 단어를 확인합니다.
  • 위의 과정에서 모든 문자가 해당하지 않는 단어는 그룹 단어가 되므로 해당 단어는 그룹 단어 개수에 추가합니다.
profile
자바, 웹 개발을 열심히 공부하고 있습니다!

0개의 댓글