들어가며 생활 패턴이 들쭉날쭉 해지면서 아침에 뭐라도 강제로 해야겠다는 생각이 들었다. 이럴때 가장 효과적인 방법은 반복적이고 강제인 이벤트를 만드는 것! 그래서 아침에 코딩테스트 문제 하나씩 풀자! 이왕이면 여럿이서 하며 동기부여를 하자! 해서 뚝딱 스터디를 기획하고 인프런에서 모집하여 4명의 파이썬 모닝 알고리즘 스터디를 시작했다. 모집 글과 규칙, 진행 방식은 아래와 같았다. 이제야 눈에 보이지만 오랜만에 직접 모집해보는 스터디라 부족함도 있었다. 회고는 KPT로 짤막하게 남겨보려 한다. Keep : 잘하고 있는 점. 계속 했으면 좋겠다 싶은 점. Problem : 뭔가 문제가 있다 싶은 점. 변화가 필요한 점. Try : 잘하고 있는 것을 더 잘하기 위해서, 문제가 있는 점을 해결하기 위해서 우리..
📓기록
프로젝트의 시작을 위해 개발환경 세팅중에 MySQL 설치파일을 실행하자 이런 메시지와 함께 설치가 되지 않았다. 황당..하지만 언제나 답을 찾는 그것이 개발자. 다른 것을 설치할때 쓰던 homebrew로 매우 쉽게 MySQL 설치가 가능하다. 설치 방법은 다음과 같다 준비물: Homebrew https://brew.sh Homebrew를 터미널에 아래와 같이 입력하여 설치한다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Homebrew 설치확인 터미널에 아래와 같이 입력 brew -v MySQL 설치 터미널에 아래와 같이 입력 brew install mysql MySQL 시작 ..
카카오 계정 로그인을 눌러도.. 티스토리계정 로그인을 눌러도.. 사파리에서는 로그인이 되지 않고 뜬금없이 redirect파일과 old파일이 다운로드 된다. 저번에도 카카오 로그인이 안됐던 이슈가 있어서 캐시를 비우고 로그인했더니 잘됐었다. 하지만 오늘은 안됨... 브라우저 정보: Safari 버전 16.3(18614.4.6.1.6) 해결방법 : 브라우저를 바꾼다.. ㅠㅠ 크롬으로 이 글을 쓰고 있다. 고객 문의 후 결과를 여기에 공유하겠다! new! 해결방법 사파리에서 캐시도 비우고 쿠키도 전부 삭제했더니 됐다. 사파리가 제일 편해서 이걸로 주로 블로그 작성했었는데.. 불편하다. + 고객 문의 결과 답변을 받은지 꽤 되었는데 까먹고 있다가 이제야 블로그에 적어본다. 고객센터도 별 도움은 되지 않았다.
배열 크기를 지정하고 해당 크기만큼의 연속된 메모리 공간을 할당받는 작업을 수행하는 자료형 크기가 고정되어 있으며, 한번 생성한 배열은 크기를 변경하는 것이 불가. 크기를 지정하지 않고 자동으로 리사이징하는 배열인 동적 배열 = 파이썬에서는 리스트 파이썬은 정적 배열은 따로 제공하지 않으며 동적배열인 리스트만 제공 동적 배열의 원리 미리 초깃값을 작게 잡아 배열을 생성하고, 데이터가 추가되면서 꽉 채워지면, 늘려주고 모두 복사하는 식. 대개는 더블링이라 하여 2배씩 늘려줌 언어마다 늘려가는 비율은 상이하다. 파이썬의 재할당 비율(그로스 팩터, 성장 인자)은 초반에는 2배씩 늘려가지만 전체적으로는 약 1.125배로 다른 언어에 비해 다소 조금만 늘려가는 형태로 구현되어 있음 문제 풀어보기 두 수의 합 - ..
마음에 드는(??) 풀이만 정리해보자 유효한 펠린드롬 def isPalindrome(self, s:str)->bool: s=s.lower s=re.sub('[^a-z0-9]','',s) return s == s[::-1] 영숫자만 걸러내도록 정규식으로 처리 [::-1]을 사용하면 리스트를 뒤집을 수 있음 문자열 뒤집기 def reverseStr(self, s:List[str])->None: s.reverse() 또한 문자열 슬라이싱을 이용한 s[:]=s[::-1]도 가능함 로그 파일 재정렬 def reorderLogFiles(self, logs: List[str]) -> List[str]: letters, digits = [], [] for log in logs: if log.split()[1].isdi..
리스트 말 그래도 순서대로 저장하는 시퀀스이자 변경가능한 목록 입력 순서가 유지되며 내부적으로는 동적 배열로 구현 연속된 공간에 요소를 배치하는 배열의 장점과 다양한 타입을 연결해 배치하는 연결 리스트의 장점을 모두 취한 듯한 형태를 띠며, 실제로 리스트를 잘 사용하기만 해도 배열과 연결 리스트가 모두 필요 없을 정도로 강력하다. 주요 연산 연산 설명 시간복잡도 append("a") 리스트에 원소를 하나 삽입할 때 사용 O(1) sort(a) 오름차순 정렬 / 내림차순 정렬 O(NlogN) reverse() 리스트의 원소의 순서를 모두 뒤집어 놓음 O(N) insert(삽입할 위치 인덱스, 삽입할 값) 특정한 인덱스 위치에 원소를 삽입할 때 사용 O(N) count(a) 리스트에서 특정한 값을 가지는 데..
시간 복잡도 어떤 알고리즘을 수행하는 데 걸리는 시간을 설명하는 계산 복잡도 빅오 입력값이 무한대로 향할때 함수의 상한을 설명하는 수학적 표기 방법 점근적 실행시간을 표기할 때 가장 널리 쓰이는 수학적 표기법 O(1) 입력값이 아무리 커도 실행시간 일정 최고의 알고리즘 O(logn) 실행 시간은 입력값에 영향을 받는다 로그는 매우 큰 입력값에도 크게 영향을 받지 않는 편 대표적으로 이진 검색 O(n) 입력값만큼 실행시간에 영향을 받음, 선형 시간 알고리즘, 정렬되지 않은 리스트에서 최댓값 또는 최솟값을 찾는 경우 모든 입력값을 적어도 한번 이상은 살펴봐야 함 O(nlogn) 병합정렬을 비롯한 대부분 효율 좋은 정렬 알고리즘 입력값이 최선인 경우, 비교를 건너뛰어 O(n)이 될 수 있으며 팀소트가 이런 로..
https://youtu.be/d14cQHBtZc4 유튜브 알고리즘이 좋은 인터뷰를 띄워줬다. 처음 '차의 뒷좌석에 탔다고 생각하지 말고 운전대를 잡았다고 생각하라.' 그 한 마디에 너무 크게 한 방 맞았다. 경력이 많은 것도 아니고, 누군가를 따라서 가야겠다고만 생각했던 지난 시간들과 현재의 내가 나약해지는 순간이었다. 솔직히 말하자면 지난날의 나는 일이 편하다는 이유로 심리적 '컴포트존'에 들어가 있었다고 생각한다. 그냥 일도 편하고... 불편한 것도 없으니 이대로 쭉 살아갈까?라고. 어느 날 문득 나를 봤을 때 이대로 발전 없이 영영 멈춰있을 내가 너무 안타까워졌다. 그렇게 만든 건 나임에도...(과거의 나에게 미안하다...) 또 하나 인상 깊었던 건 나의 목표를 무빙 타깃으로 잡는다는 점이다. 물..