문제 : 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>에 넣어도 된다. 마찬가지로 최종적으로 해시셋의 크기가 답이 된다.
'PS > BOJ' 카테고리의 다른 글
백준 3409 자바 - 문자 방정식 (BOJ 3409 JAVA) (0) | 2021.10.28 |
---|---|
백준 1575 자바 - 졸업 (BOJ 1575 JAVA) (0) | 2021.10.26 |
백준 14881 자바 - 물통 문제 (BOJ 14881 JAVA) (0) | 2021.10.25 |
백준 23046 자바 - 큰 수 뒤집기 (BOJ 23046 JAVA) (0) | 2021.10.24 |
백준 9291 자바 - 스도쿠 채점 (BOJ 9291 JAVA) (0) | 2021.10.24 |
댓글