공부하기/백준

[Java] 백준 풀기 16499 - 동일한 단어 그룹화하기

XEV 2023. 10. 14. 23:30

자바 백준 16499번

실버 4

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

 

16499번: 동일한 단어 그룹화하기

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 자료 구조, 문자열, 정렬, 해시를 사용한 집합과 맵

 

 

 

 

 

코드 보기

import java.util.Scanner;
import java.util.HashMap;
import java.util.Arrays;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();  // 단어의 개수 N을 입력받음
        
        HashMap<String, Integer> groups = new HashMap<>();  // 그룹화를 위한 HashMap 선언
        
        for (int i = 0; i < N; i++) {
            String word = sc.next();  // 다음 단어를 입력받음
            String sortedWord = sortString(word);  // 알파벳 정렬된 단어를 얻음
            // System.out.println(sortedWord);  // TEST PRINT
            
            // HashMap에 sortedWord가 이미 존재한다면 해당 값에 1을 더하고, 없다면 1을 설정
            groups.put(sortedWord, groups.getOrDefault(sortedWord, 0) + 1);
        }
        
        // TEST PRINT
        // for (HashMap.Entry<String, Integer> entry : groups.entrySet()) {
        //     String key = entry.getKey();
        //     Integer value = entry.getValue();
        //     System.out.println("Key: " + key + ", Value: " + value);
        // }
        
        // HashMap의 크기를 구하여 그룹의 최소 개수를 얻음
        int groupCount = groups.size();
        System.out.println(groupCount);
    }
    
    // 문자열을 알파벳 순으로 정렬하는 메서드
    private static String sortString(String input) {
        char[] chars = input.toCharArray();
        Arrays.sort(chars);  // 문자열을 알파벳 순으로 정렬
        return new String(chars);  // 정렬된 문자열을 반환
    }
    
}



/*

4
cat
dog
god
tca

Key: act, Value: 2
Key: dgo, Value: 2
2

*/