[백준] 1316. 그룹 단어 체커

bonnie·2022년 1월 10일
0

🟢 알고리즘 풀이

목록 보기
25/27
post-thumbnail

문제

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

풀이

입력 받은 문자열 중 같은 알파벳이 연속되는 경우에만 그룹 단어라 할 수 있다. 즉 aabc는 a,b,c가 있는 그룹 단어이고, aba는 a가 연속 되지 않기 때문에 그룹 단어라고 할 수 없다.
먼저 테스트 케이스 num을 입력 받는다. 그리고 그 num만큼 반복문을 돌리고 알파벳 26개의 존재 여부를 확인 하기 위한 boolean 배열을 생성한다.
입력 받은 str의 첫번째 단어를 가져와 first에 저장하고 그 알파벳에 해당하는 index에 true값을 저장한다.
ex) first→a일 때, arr[first-97] → arr[97-97] = arr[0]
그리고 그 다음 알파벳을 가져와 next에 저장한다.
이 때, arr의 값이 false이고, first값과 next값이 같지 않으면 처음 나오는 알파벳이므로 arr[next-97]에 true 값을 저장하고, first를 현재 알파벳, 즉 next로 바꿔서 저장해준다.
만약에 arr 값이 존재하고 first값과 next 값이 같지 않다면 연속된 알파벳이 아니라는 의미이므로 그룹 단어가 아니다.
최종적으로 group이 true일 경우에 count++을 해주어서 갯수를 출력한다.

코드

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

public class Q_1316 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(br.readLine());
 
		int count = 0;

		for (int i = 0; i < num; i++) {
			boolean[] arr = new boolean[26];
			String str = br.readLine();
			boolean group = true;
			char first = str.charAt(0);
			arr[first - 97] = true;

			for (int j = 1; j < str.length(); j++) {
				char next = str.charAt(j);
				if (!arr[next - 97] && first != next) {
					arr[next - 97] = true;
					first = str.charAt(j);

				} else if (arr[next - 97] && first != next) {
					group = false;
					break;
				}
			}
			if (group) count++;
		}
		System.out.println(count);
	}

}
profile
괴발🐱개발🐶

0개의 댓글