본문 바로가기
Algorithm/Weekly Solved

[백준 1316] 그룹 단어 체커 - Java 코드

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

문제

 

설계

메인과 처리함수를 나누어 설계하려 한다.

메인에서는 Scanner를 이용해 입력받을 단어수를 N을 입력받으면,

해당 수만큼 for문을 돌려가며 처리함수를 불러 결과값을 구해 출력하게 한다.

 

처리함수는 입력받은 문자열을 받아서 char 별로 set 자료구조를 이용해 검사할 것이다.

set은 중복검사에 용이하고 빠른 접근이 가능한 자료구조이기에 문제를 보자마자 떠올랏다.    

 

풀이

import java.util.HashSet;
import java.util.Scanner;

public class Main {
	static int ans;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		ans = n;
		for(int i=0;i<n;i++) {
			String str = sc.next();
			checkFunc(str);
		}
		System.out.println(ans);
	}
	private static void checkFunc(String str) {
		HashSet<Character> set = new HashSet<>();
		char ch = str.charAt(0);
		set.add(ch);
		for(int i=0;i<str.length();i++) {
			if(ch == str.charAt(i))
				continue;
			else {
				if(set.contains(str.charAt(i))) {
					ans--;
					return;
				}				
				else {
					ch = str.charAt(i);
					set.add(ch);
				}
			}				
		}
	}
}

 

나는 전역변수 ans를 선언해서 입력받은 단어갯수중에서 그룹단어가 아닐때마다 하나씩 빼주었다.

코드가 조금 길어졌지만, 메모리를 많이 먹지 않았다.