8000 GitHub - summer2293/algorithm-study: prography 5th algorithm study
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

summer2293/algorithm-study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
10000
 
 
 
 
 
 
 
 

Repository files navigation

algorithm-study

프로그라피 5기 알고리즘 스터디 입니다.

4주간 프로그래머스 단계별 알고리즘 문제 스터디 진행방식 및 회고입니다.

⭐️경축⭐️ 지창, 동주, 수민 취뽀! 예이예!

Rule

⏱ 시간

  • 역삼역 매주 토요일 11시 (4주)
  • 매주 스터디룸은 각 주 스터디 회고 담당이 예약한다.
  • 문제 제출 기한은 금요일 12시

✏️ 스터디 방식

  • github을 통해 코드 공유 / 피드백

  • 프로그래머스 단계별 문제 풀이

  • 코드 리뷰는 질문과 답변 성실하게, 온라인에서만 진행한다.
  • 1주차 (LV1) 7문제,

  • 2주차 (LV2) 5문제,

  • 3주차 (LV3) 3문제

  • 4주차 (LV4,5) 2문제로 진행한다.

  • 공통문제, 개별문제(1)문제 를 풀어오고, 개별 문제는 어떻게 접근했는지 자세히 서술한다

    example

    완주하지 못한 선수에서 해시를 썻다
    해시를 쓰면 문자열을 더욱 빠르게 찾기 웅앵웅
    시간 복잡도 ㅇㅇㅇ
    공간 복잡도 ㅇㅇㅇ
    이런식으로 접근해서 풀었다 
    
  • 시간복잡도 공간 복잡도는 주석으로 작성해서 넣는다.

  • 새로 안 사실 정해주기
    파이썬 안 자료형의 구현
    이게 왜 재밌을까 생각해보면 씨나 자바 같은 언어는 인트가 사이즈가 있는데
    우리 항상 파이썬 인트 쓰면서 물어보지 않은 질문들?
    그런 작지만 은근 중요한 부분
    엄청 어렵지 않고 우리가 다 알아들을 수 있으나 모를 법한 것들
    그런거 하나씩 번갈아가면서 준비하는게 좋을거 같아
    
  • 코드를 짜면서 새로 배운 라이브러리가 있다면 공유하쟈
⭐️ 벌금 관련 ⭐️
지각
  • 첫 지각은 1,000 원부터
  • 이후 피보나치 수열로 오른다
    • 1, 1, 2, 3, 5, ...
결석
  • 1번 결석 면제, 이후 5,000원
과제 안할 경우
  • 금요일 00:00 시 미제출 경우
    • 1,000원 + 피보나치 (지각 동일)

schedule

2020/01/18

2020/02/01

2020/02/15

2020/02/29

⭐️ 4주차 남은 인원 전원 취뽀 달성! ⭐️

회고

10/29

is 연산자

'is' 연산자는 포인터(레퍼런스)를 비교하는 연산자이지, 데이터를 비교하는 연산자가 아니라는 점을 설명할 수 있다. 'is' 커맨드는 가급적이면 상수(None, True, False 등)를 비교하는데만 쓰도록 하자. 예를 들자면 varA is not None 이런 식으로... http://seorenn.blogspot.com/2011/04/python-is.html

^ - XOR 비트 상호배제

비트 상호배제는 같은 자리의 값이 서로 다르면 해당 자리의 연산 결과가 1이며 같을 때 0입니다. 예를 들어 a가 6이고 b가 3일 때 a^b는 5입니다.(110^011 => 101)

    def singleNumber(self, nums: List[int]) -> int:
        answer = 0
        for elem in nums:
            answer = answer ^ elem
자료를 소팅된 상태로 저장해야 한다면 무슨 자료 구조를 써야 할까요? (p.s 면접 담당자가 좋아함)

트리를 사용할 것 같다. in order traversal 방식을 사용하면 자동으로 소팅이 되어있다.

or

AVL 트리는 모든 internal node v에 대해, v의 자식들의 높이가 최대 1만큼만 차이가 나는 이진 탐색 트리이다. insert나 remove할 때 높이차가 2이상이면, 데이터를 재구조화하기 때문에 유용할 것 같다!

11/05

for _ in range(k)

인덱스 안쓸때 이런식으로 쓸 수 있다.

sort 와 sorted의 차이
  • sort() 원본을 직접 정렬 , None을 반환함
list.sort()
  • sorted(list) 원본에 영향을 끼치지 않음, 정렬한 새로운 문자열 혹은 list를 반환함
collections.Counter()

컨테이너에 동일한 값의 자료가 몇개인지를 파악하는데 사용하는 객체이다.

  • most_common(n) 입력된 값의 요소들 중 빈도수(frequency)가 높은 순으로 상위 n개를 리스트(list) 안의 투플(tuple) 형태로 반환한다. n을 입력하지 않은 경우, 요소 전체를 [(‘값’, 개수)]의 형태로 반환한다.
import collections

c2 = collections.Counter(‘apple, orange, grape’)
print(c2.most_common())
print(c2.most_common(3))
try-execept 차이

https://excelsior-cjh.tistory.com/94 [EXCELSIOR]

  • 효율적 측면
    • 99% try문을 통과할시 try, excepy를 쓰는게 낫고 50%이상이 try문을 통과하지 못할시 if else를 쓰는게 효율적
  • 그 외 참고할 자료: None 보다 예외를 발생시키자 (Effective Python: Better way 14)
    • None을 반환하는 함수는 후에 호출할 때 해당 값이 None인지 평가해줘야함 ( if return_none_or_value() == None else…)
    • 코드를 읽는 사람이 왜 None을 반환하는지 명확하게 유추할 수 없음 -> raise CustomException을 발생시켜서 명확히 어떤 상황인지 명시하는게

1/23

python sort 에서 사용하는 알고리즘
clean code

2/1

if i in city():
        if city in memory:  # deque()
            memory.remove(city) 
            runtime += CACHE_HIT
        else: 
            runtime += CACHE_MISS

이런 in 작업에서 deque(), list() 는 선형 시간(O(N)) 을 가지지만, Set 타입의 경우 상수시간(O(1))을 가진다. 따라서 set 으로 작업하면 속도를 줄일 수 잇다.

divmod() - 몫과 나머지

알고리즘 문제를 풀다 보면, 정수를 나눈 몫과 나머지를 구해야 할 때

 q, r = divmod(n-1, 3) # q 몫 r 나머지 
.startswith()

skill이 "cbd" 일 때, pre_skill 시작 문자열이 c or cb or cbd 가 맞는지 check 해준다.

skill.startswith(pre_skill)
재귀함수를 언제 쓰면 좋을 까?

merge와 같이 1/2 로 줄어드는 방식에 사용하면 좋다. 하지만, 하나만 떨어트리는 형식, input recursion depth 가 800~100 사이여서, 메모리 자체에서 depth 를 걸기 때문에 이런 방식에는 안좋다.

다른 언어에는 tail recursion 이 존재한다. 꼬리 재귀는 밑에 쌓는게 아니라, depth 를 차지하지 않는다.

비추천의 의견

협업을 하는 상황에서 재귀로 만들어 놓을때 다른 사람들이 이거 보고 수정할 때, 이게 재귀함수인지 모르는 케이스가 있다. 재귀함수는 협업할때는 안좋다고 지양하는 걸로 얼핏 들었음.

sys.getrecursionlimit()

내 시스템의 스택을 확인할 수있다.

>>> import sys
>>> sys.getrecursionlimit() 
1000
sys.setrecursionlimit()

내 시스템의 스택 설정을 변경한다

x,y,z = record[i].split(' ')

배열로 받지 않고, 고정 값이면 이렇게 받을 수 있다. 오픈 채팅방의 경우 "이름", "uid", "상태" 값의 고정된 3 값이 반복되는 것으로 정의되는데, 이럴때 쓰면 훨씬 직관적인 코드를 짤 수 있을 것 같다.

a, b = b, a

다른 언어와 달리 python 은 swap 이 가능하다.

이전 스터디 기록은 README_OLD로 옮겼습니다.

2/15

rsa 에 대해서

인수분해에서 착안. 인수분해는 힘들다! 에서 나왔다. NP 문제

web server 구조의 이해
runserver 역할
  • api 게이트웨이
  • 리버스 프록시
  • staic file

start_response // environment

https://www.toptal.com/python/pythons-wsgi-server-application-interface>

파이썬 이모저모

https://planjang.tistory.com/230

About

prography 5th algorithm study

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8

0