hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

PS/PS Log

23.04.25. 풀었던 문제들

Leetcode 2336. Smallest Number in Infinite Set

 2개의 값으로 쉽게 풀 수 있다. 처음에는 pq로 두었는데... 이렇게 두면 이미 addBack한 숫자를 또 addBack하는 경우 중복이 발생하는데 이를 해결하지 못한다. 따라서 set으로 해결했다.

 

  • infinite set에서 제일 작은 숫자인 start 변수, 그리고 infinite에 있지 않은, popSmallest() 한 이후에 addBack()된 숫자들을 저장하는 목록 s을 둔다.
  • popSmallest()의 경우, s에 값이 있는 경우 무조건 start보다 작은 수가 s에 들어가 있는 것이므로 s에서 제일 작은 숫자를 pop하고 그것을 리턴한다. 그렇지 않다면 start값을 리턴하고, start++한다.
  • addBack()의 경우에는, 주어진 num이 start보다 크거나 같다면 해당 숫자는 이미 infinite set에 있는 것이므로 아무것도 하지 않는다. 그렇지 않다면 s에 넣어 주어야 한다.
// Runtime 73 ms Beats 91.65%
// Memory 35.4 MB Beats 84.48%

class SmallestInfiniteSet {
public:
    int start;
    set<int> s;
    SmallestInfiniteSet() {
        start = 1;
    }

    // start는 infinite의 시작 숫자, pq는 addBack()했을 때 infinite에 있지 않을 때 들어가는 공간
    
    int popSmallest() {
        if(!s.empty()){
            int top = *s.begin(); s.erase(s.begin());
            return top;
        }
        start++;
        return start-1;
    }
    
    void addBack(int num) {
        if(num < start) s.insert(num);
    }
};`

 

시간복잡도

 popSmallest는 s에서 pop하므로 logn, addBack은 insert하므로 logn이다. 따라서 n개의 명령어가 주어질 때 O(nlogn)이다.

 

공간복잡도

 set에는 worst case O(n)의 정수가 들어갈 것이다. 따라서 O(n)

 

 

 

 

 

 

저작자표시 (새창열림)

'PS > PS Log' 카테고리의 다른 글

23.04.27. 풀었던 문제들  (0) 2023.04.27
23.04.26. 풀었던 문제들  (0) 2023.04.26
23.04.24. 풀었던 문제들  (0) 2023.04.24
23.04.23. 풀었던 문제들  (0) 2023.04.23
23.04.22. 풀었던 문제들  (0) 2023.04.22
    hyelie
    hyelie

    티스토리툴바