2022. 5. 19. 00:50ㆍTIL(Today I learned)
🏴Facts(한 것)
- 데이터 중심 애플리케이션 설계 스터디
- 알고리즘 문제
- 운동하기
🏴Findings(배운 것)
알고리즘 문제를 풀다가 재밌는 파이썬 문법이 있어서 TIL에 남겨 놓으려 한다.
집합과 관련한 문법으로, 파이썬의 경우 set 자료구조를 지원하기 때문에
set을 통해서 합집합과 차집합, 교집합을 구할 수 있다.
잠시 문법을 보자면
#합집합
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
union = list(set().union(list1, list2))
# union = list(set(list1) | set(list2))
#교집합
intersection = list(set(list1) & set(list2))
#intersection = list(set().intersection(list1, list2))
#차집합
compl = list(set(list1) - set(list2))
#compl = list(set().difference(list1, list2))
간단하다.
영어가 편한 사람들은 union, intersection, difference로 외워도 되고
논리연산자가 편한 사람들은 논리연산자로 충분히 암기가 가능하다.
이렇게 set자료구조를 사용하면 간단하게 집합에 관한 연산을 해결할 수 있는데,
문제는 다중집합인 경우는 해결하지 못한다.
예를 들어 배열 1에는 1, 1, 2, 3, 5 가 들어있고
배열 2에는 1, 1, 3, 6이 있다면 이 둘의 다중교집합은 어떻게 될까?
[1, 1, 3]이 되어야 정상적으로 작동한 것 아니겠는가?
이를 해결하기 위해서는 collections 라이브러리가 필요하다.
import collections
list1 = [1, 1, 2, 3, 5]
list2 = [1, 1, 3, 6]
st1 = collections.Counter(list1)
st2 = collections.Counter(list2)
#합집합
print(list((st1+st2).elements()))
#교집합
print(list((st1&st2).elements()))
#차집합
print(list((st1-st2).elements()))
이렇게 사용하면 문제없이 해결할 수 있다.
오늘 코드숨에서 <데이터 중심 애플리케이션 설계> 책으로 스터디를 진행했다.
첫시간인 만큼 책 서문과 1장을 간단히 읽어보았고,
서문을 통해서 이 책은 어떤 책인지, 어떤 것을 배울 수 있는지를 알 수 있었고,
1장에서는 데이터 중심 애플리케이션 설계에서 가장 중요한 3개의 요소인 신뢰성, 확장성, 유지보수성에 대해
간략히 알아보았다.
이책을 읽고 난 다음에는 다음과 같은 목적을 달성할 수 있다.
- 특정 목적에 맞는 기술을 결정하고 도구를 조합할 수 있다.
- 데이터 시스템을 확장성 있게 만드는 방법을 알 수 있다.
- 애플리케이션 고가용성으로 만들 수 있다.
- 시스템 규모가 커지고 요구사항이 바뀌더라도 오랜기간 쉽게 유지보수 할 수 있는 방법을 알 수 있다.
특히 좋았던 부분은
이런 급격한 기술 변화에도 변하지 않는 원리가 있다. ~~~ 즉, 데이터 시스템의 동작 방식뿐만 아니라 왜 그런 식으로 동작하며 어떤 질문을 해야 하는지를 알아본다.
우리가 데이터를 저장하거나 사용하기 위해서 데이터 시스템을 사용하는데, 어떤 데이터 시스템을 사용할지 결정해야하는 순간이 반드시 온다.
이때 우리는 요구사항에 맞게 어떤 동작이 필요하며, 그 필요에 대한 이유를 알 때 올바른 도구를 선택할 수 있다.
그리고 이 책에는 이러한 변치않는 원리를 제공해준다.
🏴Affirmation(자기선언)
- 매일 알고리즘 문제 1문제 이상 풀기 -> 성공
- 수업 공부한 것은 일주일 내에 포스팅하기 -> 실패
- 자바 8버전에 익숙해지기 -> 실패
🏴여담
몇개월 만에 운동하니 힘들다.
'TIL(Today I learned)' 카테고리의 다른 글
(TIL) 20220521, 정적 메서드/기본 메서드, 디자인 패턴 (0) | 2022.05.22 |
---|---|
(TIL) 20220520, 나의 강점. (0) | 2022.05.21 |
(TIL) 20220517 (0) | 2022.05.18 |
(TIL) 20220515 (0) | 2022.05.16 |
(TIL) 20220513 (0) | 2022.05.13 |