Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- programmers
- 구슬탈출2
- 격파르타 장점
- 격파르타 합격후기
- Algorithm
- 프로그래머스
- 야근지수
- 격파르타 후기
- 백준
- [sqld]자격증합격
- hackerrank
- candies
- python
- 피보나치 함수
- 파이썬
- Interview Preparation Kit
- Max Array Sum
- 코딩테스트
- 매칭점수
- DFS: Connected Cell in a Grid
- 해커랭크
- 머신러닝
- Common Child
- Reverse Shuffle Merge
- Roads and Libraries
- Special String Again
- Recursion: Davis' Staircase
- BFS: Shortest Reach in a Graph
- Find the nearest clone
- 알고리즘
Archives
- Today
- Total
Archive
[Hackrrank] [Medium] Count Triplets 본문
https://www.hackerrank.com/challenges/count-triplets-1/problem
풀이
- 숫자로 구성된 배열, 등비급수 공비 r이 주어졌을 때, 세 개의 숫자의 index가 오름차순을 만족하는 배열의 수를 구하는 문제
- 단순히 숫자 종류만 count해서 곱하면 정답보다 많은 수를 계산하게되므로, index가 오름차순인 조건을 만족하는게 중요
- 단순반복으로 구현하면 timeout 발생.
- dictionary 자료구조를 사용해 현재 숫자에서 가능한 등비수열 개수를 count하는 dynamic programming 문제
- 세 가지 경우를 생각해야 함. 등비수열이 오름차순으로 num1, num2, num3이라 가정. arr 특정 원소는 num이라 가정.
- num이 num1일 때(가장 작은수) -> num2에 num*r(가운데 수)을 key값으로 한 뒤 1 증가
- num이 num2일 때 -> num3에 key값으로 num * r(가장 큰 수)을 하고 num2[num] 증가
- num3[num * r] += num2[num]
- num이 num3일 때 -> num3 dictionary에는 현재까지 본 데이터로 num이 가장 큰 수일 때 등비수열 개수가 저장되어 있고 이를 result에 더해줌.
- num이 num3에도, num2에도 포함되는 경우도 있음. -> if문으로 처리(not elif)
- r=3일 때, 9같은 경우 1, 3, 9(가장 큰 수) // 3, 9, 27(중간 숫자)
- 순서대로 iteration 돌기 때문에 index의 오름차순 조건을 만족.
def countTriplets(arr, r):
from collections import defaultdict
result = 0
num2 = defaultdict(int)
num3 = defaultdict(int)
for num in arr:
if num in num3:
result += num3[num]
if num in num2:
num3[num * r] += num2[num]
num2[num * r] += 1
return result
'공부 > Algorithm' 카테고리의 다른 글
[Hackerrank] [Hard] Merge Sort: Counting Inversions (0) | 2020.08.25 |
---|---|
[Hackerrank] [Medium] Fraudulent Activity Notifications (0) | 2020.08.24 |
[Hackerrank] [Medium] Sherlock and Anagrams (0) | 2020.08.22 |
[programmers] Level4. 자동완성 (0) | 2020.08.17 |
[programmers] Level4. 도둑질 (0) | 2020.08.16 |
Comments