-
HackerRank Interview Preparation Kit > Dictionaries and HashmapsAlgorithm/hackerrank 2018. 7. 17. 14:33
HackerRank의 Interview Preparation Kit > Dictionaries and Hashmaps의 Medium 이상 문제
Sherlock and Anagrams - medium
문제요약
문자열 s가 주어지면 s의 substring들의 anagram pair의 수를 계산 (2<=|s|<=100)
Sample Input
2
abba
abcd
Sample output
4
0
풀이
각 substring을 정렬 후 나타나는 개수를 카운팅. 동일 문자들을 사용한 substring이 n개면, 이 중 2개를 선택하는 경우의 수 만큼의 pair가 존재. n*(n-1)/2
Count Triplets - medium
문제요약
n개의 integer배열 arr과 등비 r이 주어지면, (i,j,k) i<j,k인 등비수열의 수를 계산
(1<=n<=10^5, 1<=r<=10^9, 1<=arr[i]<=10^9)
Sample Input
4 2
1 2 2 4
Sample output
2
풀이
가능한 수를 전부 계산하다가, 도통 모르겠어서 답을 보고 이해하는데도 오래걸리...
(a, ar, arr)대신 (a/r, a, a*r)로 접근을 변경하면 r을 한 번만 곱하거나 나누는 것으로 판단할 수 있다.
arr의 각 수의 count를 계산해서 dictionary에 저장, arr을 각 항목 a마다 a/r과 a*r의 수를 곱해주면 (a/r, a, a*r) 각 a마다 경우의 수가 계산된다.
r = 1인 경우는 a/r, a, a*r이 모두 같기 때문에, 고려할 필요가 있고 a/r과 a*r의 수를 찾을 dictionary를 별도로 운영하면서 비교하면 해결된다. 자세한 설명은 코드로.
Frequency queries - medium
문제요약
q개의 query가 주어졌을 때, 값에 따라 수행 후 최종 결과 반환
(1<=q<=10^6, 1<=x,y,z<=10^9, q[i][0] ∈ {1,2,3} ,1<=q[i][1]<=10^9)
[1 x] : x 추가
[2 y] : y 하나 제거
[3 z] : z개만큼 있는 수가 있으면 1, 없으면 0
Sample Input
8
1 5
1 6
3 2
1 10
1 10
1 6
2 5
3 2
Sample output
0
1
풀이
해당 수를 추가하고 제거한 후 개수를 판단하기 때문에, query에 따라 개수를 저장하고 3이 나오면 개수에 맞는 수가 있는지를 판단한다. 개수를 dictionary에 {수:개수}로 저장하여 판단했으나, timeout.
{개수:개수에 해당하는 수의 개수} dictionary를 추가로 저장하고 개수의 수가 있는지 판단하는 부분도 O(1)으로 변경