본문 바로가기
PS/BOJ

백준 16499 자바 - 동일한 단어 그룹화하기 (BOJ 16499 JAVA)

by Nahwasa 2021. 10. 26.

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

코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/16400/BOJ_16499.java

 

  만약 N개의 문자열에 대해 알파벳 순서까지 모두 같아야 한다고 하자. 그럼 단순히 HashSet<String>에 입력받은 단어를 넣어보면 알아서 중복값이 제거되니, 해시셋의 크기가 답이 된다.

 

  그럼 순서만 달라야 하는 경우는 어떻게 해야 할까? 여기서 서로의 동일성을 판별할 수 있는 기준은, N개의 단어에 대해 각각 '알파벳 소문자가 몇 번씩 나왔는지' 이다.

알파벳 소문자는 총 26개 이므로, 26칸짜리 배열을 만들어 두고, 입력 받은 각 문자열에 대해 각 character를 보면서 각 문자가 몇 번 나왔는지 세준다.

예를들어 aabcdefgzzz에 대해 세보면 다음과 같다.

그럼 이게 각 문자열을 대표할 수 있는 배열이므로, 이 배열로 Comparator를 정의해서 hashset을 돌려도 되고, 간단히 하려면 그냥 위 코드처럼 저 배열을 "21111110000000000000000003" 처럼 문자열로 바꿔서 HashSet<String>에 넣어도 된다. 마찬가지로 최종적으로 해시셋의 크기가 답이 된다.

댓글