백준 16499 동일한 단어 그룹화하기 문제풀이 (JAVA)

0

문제 링크

문제


소문자로 이루어진 단어 N개가 주어졌을 때, 단어가 총 최소 몇 개의 그룹으로 이루어져 있는지 구하는 프로그램을 작성하시오.

그룹에 속한 단어는 모두 같은 알파벳으로 이루어져 있어야 하고, 개수도 같아야 한다. 즉, 단어를 구성하는 알파벳의 순서만 달라야 한다.

입력


첫째 줄에 단어의 개수 N이 주어진다. (2 ≤ N ≤ 100) 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 10을 넘지 않는다.

출력


첫째 줄에 그룹의 최소 개수를 출력한다.

풀이


입력받은 단어를 문자형 배열에 넣고, 아스키코드순으로 정렬해서 다시 문자열로 만든다.
해당 단어를 words라는 배열에 넣고,그룹단어를 각각 구하면 되는데,
생각해보니까 그냥 hashSet 이용하면 되는데....

소스코드


import java.math.BigInteger;
import java.util.*;
import java.io.*;


public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;// = new StringTokenizer(br.readLine());
        final int NUMBER_OF_WORD = Integer.parseInt(br.readLine());
        String words[] = new String[NUMBER_OF_WORD];
        int pivot = 0;
        for (int testCase = 0; testCase < NUMBER_OF_WORD; testCase++) {
            char wordTemp[] = br.readLine().toCharArray();
            Arrays.sort(wordTemp);
            String word = new String(wordTemp);
            words[pivot++] = word;
        }
        Arrays.sort(words);
        int groupCount = 1;

        for (int i = 1; i < NUMBER_OF_WORD; i++) {
            if (!words[i].equals(words[i - 1])) {
                groupCount++;
            }
        }

        sb.append(groupCount);
        sb.append("\n");

        bw.write(sb.toString());

        bw.flush();
        br.close();
        bw.close();

    }


}

0개의 댓글