일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 99일지
- 코딩테스트
- 개발자스터디
- 파이썬 map 함수
- Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
- 99클럽
- not a git repository
- EnvCommandError
- 코딩부트캠프후기
- 백준
- 파이썬 sep
- 개발자사이드프로젝트
- 항해플러스
- MomentumParameters
- fatal:not a git repository
- 99클럽 #99일지 #코딩테스트 #개발자스터디 #항해 #til
- 파이썬 클래스
- 파이썬 int()
- print("""
- 항해99
- Til
- 주니어개발자역량강화
- 주니어개발자멘토링
- 파이썬
- vscode cp949
- cp949
- 10430번
- print sep
- 항해
- 파이썬 |
- Today
- Total
선발대
[스파르타] 99클럽 2기 코테스터디 6일차 TIL / leet 2336 본문
LeetCode: 2336. Smallest Number in Infinite Set (링크)
Leet code에서는 문제를 처음 풀어봐서 어떻게 풀어야 할지 헤매다가 블로그를 참고하여 풀어봤다.
input 형태가 백준이나 프로그래머스와 다르게 되어 있었는데 이해하고 나니 생각보다 간단했다.
문제를 요약하면 다음과 같다. 무한한 양의 정수가 있는 집합 하나가 있고, __init__에서 생성한 빈 집합 black이 있다. 여기에서 우리는 popSmallest를 했을 때 무한한 양의 정수 집합에서 최솟값을 리턴하고 그 값을 무한양수집합에서 제거해야 한다. 그러므로 제일 처음에 popSmallest를 하게 되면 가장 작은 값인 1이 리턴된다. 다음에 또다시 popSmallest를 하게 되면 1을 제외하고 가장 최솟값을 찾아야 하는데, 이 과정을 위해 집합 black을 사용하게 된다. 최솟값을 리턴할 때마다 집합 black에 그 값이 있는지 확인하고 없으면 리턴, 있다면 +1 한 값을 다시 집합 black에서 찾아서 유무를 판단 후 리턴해야 한다.
__init__: 클래스의 새 인스턴스가 생성되면 자동으로 호출된다. 빈 집합을 설정해줘야 함.
popSmallest(): 현재 집합에서 가장 작은 숫자를 제거하고 반환해야 함
addBack(num): 집합에 숫자를 다시 추가한다. 현재 집합에 num이 없는 경우에만 추가할 수 있음.
아래 참고한 블로그에서 예시를 줬는데 다음과 같다. 읽고 나면 문제가 이해된다.
SmallestInfiniteSet은 다음의 일련의 과정을 수행한다.
1. popSmallest() 4번 반복 호출
2. addBack(2) 호출
3. pop Smallest() 2번 더 호출
[출력 결과]
(1) SmallestInfiniteSet 클래스를 인스턴스화 하고 집합 black은 빈 값으로 초기화된다.
(2) popSmallest(): 1 리턴, black: {1}
(3) popSmallest(): 2 리턴, black: {1, 2}
(4) popSmallest(): 3 리턴, black: {1, 2, 3}
(5) popSmallest(): 4 리턴, black: {1, 2, 3, 4}
(6) addBack(2): null 리턴, black: {1, 3, 4}
(7) popSmallest(): 2 리턴, black: {1, 2, 3, 4}
(8) popSmallest(): 5 리턴, black: {1, 2, 3, 4, 5}
class SmallestInfiniteSet:
def __init__(self):
self.black = set()
def popSmallest(self) -> int:
i = 1
while i in self.black:
i += 1
self.black.add(i)
return i
def addBack(self, num: int) -> None:
self.black.discard(num)
# Your SmallestInfiniteSet object will be instantiated and called as such:
# obj = SmallestInfiniteSet()
# param_1 = obj.popSmallest()
# obj.addBack(num)
'스파르타코딩클럽 > 활동 내용' 카테고리의 다른 글
[스파르타] 99클럽 2기 코테스터디 8일차 TIL / H-Index (0) | 2024.05.27 |
---|---|
[스파르타] 99클럽 2기 코테스터디 7일차 TIL / 가장 큰 수 (0) | 2024.05.26 |
[스파르타] 99클럽 2기 코테스터디 5일차 TIL / 더 맵게 (0) | 2024.05.24 |
[스파르타] 99클럽 2기 코테스터디 4일차 TIL / 올바른 괄호 (0) | 2024.05.23 |
[스파르타] 99클럽 2기 코테스터디 3일차 TIL / 기능개발 (0) | 2024.05.22 |