공부하는 블로그

Baekjoon | Q.1316 - 그룹 단어 체커 본문

알고리즘 공부

Baekjoon | Q.1316 - 그룹 단어 체커

치킨닮은닭 2019. 12. 23. 17:24
 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 단어에 존재하는 모든 문자에 대하여 각 문자가 연속해서 나타나는 그룹단어를 판별하는 문제이다.

 

import java.util.Scanner;

public class Main {

	static boolean isGroupword(String str) {
		int cursor = 0;
		int lastIndex = 0;
		char c;
		
		while(cursor != str.length()) {
			c = str.charAt(cursor);
			lastIndex = str.lastIndexOf(c);
			
			for (int i = cursor + 1; i <= lastIndex; i++) {
				if(c != str.charAt(i)) {
					return false;
				}
			}
			
			cursor = lastIndex + 1;
		}
		
		return true;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int tc = sc.nextInt();
		int count = 0;
		
		for (int i = 0; i < tc; i++) {
			String str = sc.next();
			if(isGroupword(str)) count++;
		}
		
		System.out.println(count);
		
	}

}

 

 문자열의 문자 하나를 charAt()으로 뽑아내어 그 문자의 마지막 인덱스를 찾았다. 그 후 마지막 인덱스까지의 각각의 문자를 추출해낸 문자와 차례차례 비교하여 다른 것이 있다면 연속된 문자열이 아니기 때문에 그룹단어가 아니라고 판단하였다. 만약 다른것이 없는 연속된 문자열일 경우 다시 커서(cursor)를 마지막으로 검사한 인덱스 앞으로 옮겨 위의 과정을 반복해준다. 

 

 처음에 sc.nextLine()으로 제출하니 틀리고 sc.next()로 다시 제출하니까 정답처리되었다. nextLine()의 경우 테스트케이스로 입력받은 숫자를 그룹단어인지 판별하는 테스트케이스로 인식했다. 왜그러는지는 잘 모르겠다..

Comments