320x100
문제 : https://www.hackerrank.com/challenges/sherlock-and-anagrams/problem
입력 문자열의 부분문자열들 중 애너그램 문자열이 되는 문자열 pair 개수를 구하는 문제.
애너그램이 될 수 있는 문자열들은 길이가 서로 같아야 하므로 먼저 길이가 같은 부분 문자열들을 구한다.
그리고 구한 부분 문자열을 오름차순 정렬한뒤 map에 저장한다.
map의 key는 정렬된 문자열이고 value는 key가 나온 횟수이다.
즉, "mom"이 입력 문자열로 주어지고 길이가 2인 부분 문자열을 구했을 때, ["mo", "om"] 이 나오고 각 문자열들을 오름차순 정렬하면 ["mo", "mo"] 가 된다. 이를 map에 넣으면 map에는 1개의 요소가 저장되고 이는 "mo" = 2 이다.
"mo" 문자열이 2번 나타났다는 뜻이다.
pair를 구해야 하므로 n * (n - 1) / 2 식에 map의 value를 n에 대입한다. 이 결과의 합들이 정답이 된다.
소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/hackerrank/medium/Sherlock%20and%20Anagrams.cpp
320x100
'알고리즘 문제 > Hackerrank' 카테고리의 다른 글
[hackerrank] Grid Challenge (0) | 2020.02.22 |
---|---|
[hackerrank] Largest Pyramid (0) | 2020.02.15 |
댓글