우아한테크코스/레벨5
[TIL] 2024/11/10
MINGYUM
2024. 11. 10. 18:43
날씨가 조금 따땃해진 11월이다. 🍂
불확실한 상황에 매너리즘에 빠지기 쉽지만 공부하고 싶은 것들을 꾸준히 공부하며 나아가자 😁
오늘도 오후 두 시간 정도 리트코드를 풀고 저녁에는 면접 스터디를 하였다.
https://leetcode.com/problems/set-matrix-zeroes/
Set을 이용해 0으로 만들 행과 열을 저장하고 NM번 탐색하여 Set에 저장된 행, 열이라면 0으로 세팅하는 방식으로 풀었다. 총 시간 복잡도는 C++로 풀었으므로 O(NM * log(NM))이다. 그리고 공간 복잡도는 O(N)이다.
시간 복잡도를 O(NM)으로 줄이고 공간 복잡도를 O(1)로 개선하도록 풀어보았다. 행렬 문제는 필기 없이 IDE에서만 풀기는 어려운 것 같다 😅
https://leetcode.com/problems/longest-substring-without-repeating-characters/
어제 공부한 데이터베이스 락에 이어 관련 개념을 조금 깊게 공부하였다.
- 경쟁 조건 (race condition)
- 세마포어와 뮤텍스
- 분산 락
- synchronized
- Serializable
분산 락이 무엇인지 이해하고 어떻게 서비스에 적용할 수 있을 지 알아보는 데 시간이 많이 걸렸다. 😥
서버 다중화 상태에서 동시 점유 상황을 방지하려면 일반적인 낙관적/비관적 락을 사용하면 되고, 분산 락을 사용하는 경우는 데이터베이스 다중화 상태라는 생각이 든다. 그럼 데이터베이스가 분산되기 때문에 분산 락을 사용하는 건가? 🤔🤔
어떤 상황에서 분산 락을 사용할 수 있는 지 아직 의문이 해소되지 않았다.