본문 바로가기

릿코드

264. Ugly Number II

https://leetcode.com/problems/ugly-number-ii/

1) Original Idea
   1부터 하나씩 ugly number인지 확인 후, n번째 ugly number를 return 한다.
   : 시간이 너무 많이 걸림 & 중복연산이 너무 많음 -> 시간 초과

2) ugly number list를 저장해두고,
 2, 3, 혹은 5로 나눠지는 경우(나머지가 0), 나눠진 몫이 ugly number 리스트에 있으면,
 해당 number를 ugly number 리스트에 새로 추가해준다. 아니면 pass
 : 해야하는 나머지 연산, 나누기 연산이 너무 많음  -> 시간 초과

3) num을 1부터 확인하지 않고, sorted map을 이용해서, map 안에 있는 것 중 ct 번째로 큰 숫자를 가져온다. 그 숫자에 2, 3, 5를 곱한 결과를 map에 넣는다. 이를 n번 반복한다. O(n)

4) 생각해보니 map을 굳이 쓸 필요가 없어서, sorted set으로 바꿨다.

141ms, 29.5 MB

5) Ultimite Solution의 등장 !
가장 작은 2의 배수, 3의 배수, 5의 배수를 유지하고, 세개의 Index 를 따로 유지해준다.
Min(2의배수, 3의배수, 5의 배수)가 ugly list에 들어갈 때,
2의 배수가 들어갔으면 다음 가장 작은 2의 배수를 (ugly_list[i2]*2)로 업데이트 해주고, i2 인덱스를 increment한다.
만약 num가 2와 5의 공통 배수라면, 2와 5의 배수 변수 둘다 업데이트 해준다.

0ms , 5.8 MB

 

'릿코드' 카테고리의 다른 글

409. Longest Palindrome  (1) 2022.09.20
121. Best Time to Buy and Sell Stock  (0) 2022.09.20
142. Linked List Cycle II  (0) 2022.09.20
876. Middle of the Linked List  (0) 2022.09.20
206. Reverse Linked List  (2) 2022.09.20