노래 목록이 있다고 가정하고 i번째 노래의 지속 시간은 [i]초입니다. 총 시간(초)을 60으로 나눌 수 있는 노래 쌍의 수를 찾아야 합니다.
따라서 시간 배열이 [30, 20, 150, 100, 40]과 같으면 답은 3이 됩니다. 세 쌍은 모든 경우에 대해 (3, 150), (20, 100), (20, 40)입니다. 총 지속 시간은 60으로 나눌 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 나머지를 저장하려면 맵 rem을 가져오세요. 다음으로 설정 :=0
- 시간 내 모든 요소 i에 대해 −
- rem에서 i가 0과 0으로 나누어지면 ans :=ans + rem[0]
- o 그렇지 않으면 60 – (i mod 60) in rem, ans :=ans + rem[60 – (i mod 60)]
- rem에서 내가 mod 60이면 rem[i mod 60] :=rem[i mod 60] + 1
- 그렇지 않으면 rem[i mod 60] :=1
- Ans를 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class Solution(object): def numPairsDivisibleBy60(self, time): ans = 0 remainder = {} for i in time: if i % 60 == 0 and 0 in remainder: ans += remainder[0] elif 60 - (i%60) in remainder: ans += remainder[60 - (i%60)] if i % 60 in remainder: remainder[i%60]+=1 else: remainder[i%60]=1 return ans ob1 = Solution() print(ob1.numPairsDivisibleBy60([30,20,150,100,40]))
입력
[30,20,150,100,40]
출력
3